On Web AuthenticationデータベースメソッドはWebサーバーエンジンへのアクセス管理を担当します。このデータベースメソッドは、Webブラウザーからのリクエストがサーバー上の4Dメソッド (4DACTION URLや4DSCRIPT などを使用して呼び出されるメソッド) の実行を必要とするとき、4Dから呼ばれます。
このメソッドは6つのテキスト引数$1, $2, $3, $4, $5, $6を受け取り、ブール値を$0に返します。これらの引数の意味は以下のとおりです:
引数 | 型 | 説明 |
$1 | テキスト | URL |
$2 | テキスト | HTTPヘッダー + HTTPボディ (32 KBまで) |
$3 | テキスト | Webクライアント (ブラウザー) のIPアドレス |
$4 | テキスト | サーバーのIPアドレス |
$5 | テキスト | ユーザー名 |
$6 | テキスト | パスワード |
$0 | ブール | True = リクエストを受け入れる, False = リクエストを拒否する |
これらの引数を以下のように宣言しなければなりません:
C_TEXT($1;$2;$3;$4;$5;$6)
C_BOOLEAN($0)
注: On Web Authenticationデータベースメソッドのすべての引数が必ず値を受け取るわけではありません。データベースメソッドが受け取る情報はデータベース設定ダイアログボックスでの設定により異なります (接続セキュリティ参照)。
- URL
最初の引数 ($1) はユーザーがWebブラウザーのアドレスエリアに入力したURL (からホストのアドレスを取り除いたもの) です。
イントラネット接続の場合をみてみましょう。4D WebサーバーのIPアドレスを123.4.567.89とします。以下の表はWebブラウザーに入力されたURLにより、$1が受け取る値を示しています:
Webブラウザーのアドレスに入力された値 | $1の値 |
123.4.567.89 | / |
http://123.4.567.89 | / |
123.4.567.89/Customers | /Customers |
http://123.4.567.89/Customers | /Customers |
http://123.4.567.89/Customers/Add | /Customers/Add |
123.4.567.89/Do_This/If_OK/Do_That | /Do_This/If_OK/Do_That |
- HTTPリクエストのヘッダーとボディ
2番目の引数 ($2) はWebブラウザーから送信されたHTTPリクエストのヘッダーとボディです。この情報はOn Web Authenticationデータベースメソッドにそのまま渡されることに留意してください。その内容は接続を試みたWebブラウザーの仕様により異なります。
アプリケーションでこの情報を使用するには、開発者がヘッダーとボディを解析しなければなりません。
注:
- WebクライアントのIPアドレス
$3 引数はブラウザマシンのIPアドレスを受け取ります。この情報を使用して、イントラネットアクセスとインターネットアクセスを区別できます。
注: 4DはIPv4アドレスを、96-bitの接頭辞付きのハイブリッド型のIPv6/IPv4フォーマットで返します。例えば、 ffff:192.168.2.34は、192.168.2.34というIPv4アドレスを意味します。詳細な情報については、IPv6のサポートの章を参照して下さい。
- サーバーIPアドレス
$4 引数はWebサーバを呼び出すために使用されたIPアドレスを受け取ります。4Dバージョン6.5以降マルチホーミングがサポートされ、複数のIPアドレスを持つマシンで使用できるようになりました。詳細はQR DELETE COLUMNを参照してください。
- ユーザー名とパスワード
$5 と $6 引数は、ブラウザーが表示する標準の認証ダイアログにユーザーが入力したユーザー名とパスワードを受け取ります。このダイアログはデータベース設定でパスワード管理オプションが指定されていると、接続のたびに表示されます (接続セキュリティ参照)。
注: ブラウザーから送信されたユーザー名が4Dに存在する場合、$6 引数 (ユーザーパスワード) はセキュリティのため渡されません。
- $0 引数On Web Authenticationデータベースメソッドはブール値を$0に返します:
- $0=True: 接続を受け入れる
- $0=False: 接続を受け入れない
On Web Connectionデータベースメソッドは、接続がOn Web Authenticationデータベースメソッドにより受け入れられた時にのみ実行されます。
警告: $0に値が設定されないか、$0がOn Web Authenticationデータベースメソッド内で定義されていない場合、接続は受け入れるものとされ、On Web Connectionデータベースメソッドが実行されます。
注:
- On Web Authenticationデータベースメソッド内でインターフェース要素を呼び出さないでください (ALERT, DIALOG等)。そうでなければメソッドの実行が中断され、接続は拒否されます。処理中にエラーが発生した場合も同じことが言えます。
- メソッドプロパティダイアログオックスのオプション"4DタグとURL (4DACTION...) で利用可"を使用して、プロジェクトメソッドごとに、4DACTION や 4DSCRIPTにからメソッドを実行させないようにできます。この点に関する詳細は接続セキュリティを参照してください。
On Web Authenticationデータベースメソッドは、リクエストや処理が4Dメソッドの実行を必要とするとき自動で呼び出されます。またWebサーバーが無効なスタティックURLを受け取ったときにも呼び出されます (例えばリクエストされたスタティックページが存在しない場合)。
まとめるとOn Web Authenticationデータベースメソッドは以下のケースで呼び出されます:
- 4Dが /4DACTION/ で始まるURLを受信したとき。
- 4Dが /4DCGI/ で始まるURLを受信したとき。
- 4Dが /4DSYNC/ で始まるURLを受信したとき。
- 4Dが、存在しないスタティックページをリクエストするURLを受信したとき。
- 4Dが、データベース設定もしくはWEB SET HOME PAGE コマンドを利用してホームページが設定されていない状態でルートアクセスURLを受信したとき。
- 4Dがセミダイナミックページで 4DSCRIPT タグを処理するとき。
- 4D がセミダイナミックページでメソッドに基づく 4DLOOP タグを処理するとき。
互換性に関する注意: このデータベースメソッドは4Dが/4DMETHOD/ で始まるURLを受信したときにも実行されます。このURLは廃止予定であり、互換性の目的で保持されています。
有効なスタティックページをリクエストするURLを受信したとき、On Web Authenticationデータベースメソッドは呼び出されないことに注意してください。
BASIC認証モードのOn Web Authenticationデータベースメソッドの例題:
C_TEXT($1;$2;$3;$4;$5;$6)
C_BOOLEAN($0)
C_TEXT($user;$password;$BrowserIP;$ServerIP)
C_BOOLEAN($4Duser)
ARRAY TEXT($users;0)
ARRAY LONGINT($nums;0)
C_LONGINT($upos)
$0:=False
$user:=$5
$password:=$6
$BrowserIP:=$3
$ServerIP:=$4
If(WithWildcard($user)|WithWildcard($password))
$0:=False
Else
GET USER LIST($users;$nums)
$upos:=Find in array($users;$user)
If($upos >0)
$4Duser:=Not(Is user deleted($nums{$upos}))
Else
$4Duser:=False
End if
If(Not($4Duser))
QUERY([WebUsers];[WebUsers]User=$user;*)
QUERY([WebUsers]; & [WebUsers]Password=$password)
$0:=(Records in selection([WebUsers])=1)
Else
$0:=True
End if
End if
If(Substring($BrowserIP;1;7)#"192.100.")
$0:=False
End if
DIGESTモードのの例題:
C_TEXT($1;$2;$5;$6;$3;$4)
C_TEXT($user)
C_BOOLEAN($0)
$0:=False
$user:=$5
If(WithWildcard($user))
$0:=False
Else
QUERY([WebUsers];[WebUsers]User=$user)
If(OK=1)
$0:=Validate Digest Web Password($user;[WebUsers]password)
Else
$0:=False
End if
End if
WithWildcard メソッド:
C_INTEGER($i)
C_BOOLEAN($0)
C_TEXT($1)
$0:=False
For($i;1;Length($1))
If(Character code(Substring($1;$i;1))=Character code("@"))
$0:=True
End if
End for