version 2004 (Modified)
On Web Authentication データベースメソッドはWebサーバエンジンへのアクセス管理を担当します。このデータベースメソッドは、Webブラウザからのリクエストがサーバ上の4Dメソッド (4DACTIONや4DCGI URL、4DSCRIPT などを使用して呼び出されるメソッド) の実行を必要とするとき、4Dまたは4D Serverから呼ばれます。
このメソッドは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 = リクエストを拒否する
これらの引数を以下のように宣言しなければなりません:
` On Web Authentication データベースメソッド C_TEXT($1;$2;$3;$4;$5;$6) C_BOOLEAN($0) ` メソッドコード
Note: すべての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ブラウザの仕様により異なります。
アプリケーションでこの情報を使用するには、開発者がヘッダとボディを解析しなければなりません。
Note: この引数に関する詳細はOn Web Connection データベースメソッドの説明を参照してください。
・WebクライアントのIPアドレス
$3 引数はブラウザマシンのIPアドレスを受け取ります。この情報を使用して、イントラネットアクセスとインターネットアクセスを区別できます。
・サーバIPアドレス
$4 引数はWebサーバを呼び出すために使用されたIPアドレスを受け取ります。4Dバージョン6.5以降マルチホーミングがサポートされ、複数のIPアドレスを持つマシンで使用できるようになりました。詳細はWeb サーバ設定の節を参照してください。
・ユーザ名とパスワード
$5 と $6 引数は、ブラウザが表示する標準の認証ダイアログにユーザが入力したユーザ名とパスワードを受け取ります。このダイアログは環境設定でパスワード管理オプションが指定されていると、接続のたびに表示されます (接続セキュリティの節参照)。
Note: ブラウザから送信されたユーザ名が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 データベースメソッドが実行されます。
Notes
・On Web Authentication データベースメソッド内では、いかなるインタフェース要素も呼び出さないでください (ALERT, DIALOG, 等)。そうでなければこのメソッドは中断され、接続は拒否されます。データベースメソッド実行中にエラーが発生した場合も同様です。
・“4DACTION、4DMETHODおよび4DSCRIPTで利用可能” オプションを使用して、4DACTION や 4DMETHOD によるメソッド実行をプロジェクトメソッドごとに禁止することができます。詳細は 接続セキュリティの節を参照してください。
On Web Authentication データベースメソッドの呼び出し
On Web Authentication データベースメソッドは、モードに関係なく、リクエストや処理が4Dメソッドの実行を必要とするとき自動で呼び出されます。またWebサーバが無効なスタティックURLを受け取ったときにも呼び出されます (例えばリクエストされたスタティックページが存在しない場合)。
まとめるとOn Web Authentication データベースメソッドは以下のケースで呼び出されます:
・4Dが 4DACTION/ で始まるURLを受信したとき。
・4Dが 4DMETHOD/ で始まるURLを受信したとき。
・4Dが 4DCGI/ で始まるURLを受信したとき。
・4Dが、存在しないスタティックページをリクエストするURLを受信したとき。
・4Dがセミダイナミックページで 4DSCRIPT タグを処理するとき。
・4D がセミダイナミックページでメソッドに基づく 4DLOOP タグを処理するとき。
有効なスタティックページをリクエストするURLを受信したとき、On Web Authentication データベースメソッドは呼び出されないことに注意してください。
例題
1. BASICモードのOn Web Authentication データベースメソッドの例題:
`On Web Authentication データベースメソッド
C_TEXT($5;$6;$3;$4)
C_TEXT($user;$password;$BrowserIP;$ServerIP)
C_BOOLEAN($4Duser)
ARRAY TEXT($users;0)
ARRAY LONGINT($nums;0)
C_LONGINT($upos)
C_BOOLEAN($0)
$0:=False
$user:=$5
$password:=$6
$BrowserIP:=$3
$ServerIP:=$4
`セキュリィのため@を含むユーザ名とパスワードは拒否
If (WithWildcard($user) | WithWildcard($password))
$0:=False
`WithWildcard メソッドは後述
Else
`4Dユーザがチェック
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))
`4Dに定義されたユーザでない場合、Webusersーブルを検索
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
2. DIGESTモードのOn Web Authentication データベースメソッドの例題:
`On Web Authentication データベースメソッド C_TEXT($1;$2;$5;$6;$3;$4) C_TEXT($user) C_BOOLEAN($0) $0:=False $user:=$5 `セキュリィのため@を含むユーザ名とパスワードは拒否 If(WithWildcard($user)) $0:=False `WithWildcard メソッドは後述 Else QUERY([WebUsers];[WebUsers]User=$user) If(OK=1) $0:=Validate Digest Web Password($user;[WebUsers]password) Else $0:=False`User does not exist End if End if WithWildcard メソッド:
`WithWildcard Method
`WithWildcard ( 文字列 ) -> ブール
`WithWildcard ( Name ) -> @を含む
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
参照
On Web Connection データベースメソッド, URLとフォームアクション, データベースメソッド, 接続セキュリティ.