認証
Webユーザーに特定のアクセス権を与えるには、ユーザーを認証することが必要です。 認証とは、ユーザーの資格情報 (通常は名前とパスワード) を取得・処理する方法のことです。
認証モード
4D Webサーバーでは、3つの認証モードが用意されており、ストラクチャー設定ダイアログボックスの Web/オプション (I) ページで選択することができます:
カスタムの認証 を使用することが推奨されています。
概要
4D Webサーバーのアクセスシステムの処理を以下に図示します:
rest/
で始まるリクエストは、RESTサーバー が直接処理します。
カスタムの認証 (デフォルト)
このモードでは基本的に、ユーザーを認証する方法は開発者に委ねられています。 4Dは、認証を必要とする HTTPリクエストのみを評価します。
この認証モードは最も柔軟性が高く、以下のことが可能です:
- ユーザー認証をサードパーティ・アプリケーション (例: ソーシャルネットワーク、SSO) に委ねることができます。
- 顧客データベースにアカウントを作成できるよう、ユーザーにインターフェース (Webフォームなど) を提供することもできます。登録後は、任意のカスタ ムアルゴリズムでユーザーを認証することができます ("ユーザーセッション" の章の 例題 を参照ください)。 重要なのは、以下のようなコードを使って、決してパスワードを平文で保存しないことです:
//... ユーザーアカウントの作成
ds.webUser.password:=Generate password hash($password)
ds.webUser.save()
"はじめに" の章の 例題 も参照ください。
カスタム認証が提供されていない場合、4D は On Web Authentication
データベースメソッドを呼び出します (あれば)。 $1 と $2 に加えて、ブラウザーとサーバーの IPアドレス ($3 と$ 4) のみが提供され、ユーザー名とパスワード ($5 と $6) は空です。 ユーザー認証が成功した場合、このメソッドは $0 に True を返さなければなりません。この場合、リクエストされたリソースが提供されます。認証が失敗した場合には、$0 に False を返します。
警告:
On Web Authentication
データベースメソッドが存在しない場合、接続は自動的に受け入れられます (テストモード)。
BASIC認証
ユーザーがサーバーに接続するとダイアログボックスがブラウザー上に表示され、ユーザー名とパスワードの入力を求められます。
ユーザーが入力したユーザー名とパスワードは暗号化されずに、HTTPリクエストヘッダーに含められて送信されます。 このモードで機密性を確保するには通常、HTTPSを必要とします。
入力された値は次のように評価されます:
- 4Dパスワードを含む オプションがチェックされている場合、ユーザーの認証情報はまず、内部の 4Dユーザーテーブル に対して評価されます。
- ブラウザーから送信されたユーザー名が 4D のユーザーテーブルに存在し、パスワードが正しい場合、接続は受け入れられます。 パスワードが正しくなければ接続は拒 否されます。
- ユーザー名が 4D のユーザーテーブルに存在しない場合、
On Web Authentication
データベースメソッドが呼び出されます。On Web Authentication
データベースメソッドが存在しない場合、接続は拒否されます。
- 4Dパスワードを含む オプションがチェックされていない場合、ユーザーの認証情報は、その他の接続情報 (IPアドレス、ポート、URL など) とともに
On Web Authentication
データベースメソッドに受け渡されます。On Web Authentication
データベースメソッドが存在しない場合、接続は拒否されます。
4Dクライアントの Webサーバーでは、すべての 4Dクライアントマシンが同じユーザーテーブルを共有することに留意が必要です。 ユーザー名/パスワードの検証は 4D Serverアプリケーションでおこなわれます。
DIGEST認証
DIGESTモードはより高いセキュリティレベルを提供します。認証情報は復号が困難な一方向ハッシュを使用して処理されます。
BASICモードと同様に、ユーザーは接続時に自分の名前とパスワードを入力する必要があります。 その後、On Web Authentication
データベースメソッドが呼び出されます。 DIGESTモードが有効の時、$6引数 (パスワ ード) は常に空の文字列が渡されます。 実際このモードを使用するとき、この情報はネットワークからクリアテキスト (平文) では渡されません。 この場合、接続リクエストは WEB Validate digest
コマンドを使用して検証しなければなりません。
これらのパラメーターの変更を反映させるためには、Webサーバーを再起動する必要があります。
On Web Authentication
On Web Authentication
データベースメソッドは Webサーバーエンジンへのアクセス管理を担当します。 4D または 4D Server は、動的な HTTPリクエストを受け取ると、このデータベースメソッドを呼び出します。
データベースメソッドの呼び出し
On Web Authentication
データベースメソッドは、リクエストや処理が 4Dコードの実行を必要とするとき (REST呼び出しを除く) に自動で呼び出されます。 また、Webサーバーが無効な静的URLを受信した場合 (要求された静的ページが存在しない場合など) にも呼び出されます。
つまり、On Web Authentication
データベースメソッドは次の場合に呼び出されます:
- Webサーバーが、存在しないリソースを要求する URL を受信した場合
- Webサーバーが
4DACTION/
,4DCGI/
... で始まる URL を受信した場合 - Webサーバーがルートアクセス URL を受信したが、ストラクチャー設定または
WEB SET HOME PAGE
コマンドでホームページが設定されていないとき - Webサーバーが、セミダイナミックページ内でコードを実行するタグ (
4DSCRIPT
など) を処理した場合。
次の場合には、On Web Authentication
データベースメソッドは呼び出されません:
- Webサーバーが有効な静的ページを要求する URL を受信したとき。
- when the web server receives a URL beginning with
rest/
and the REST server is launched (in this case, the authentication is handled through theds.authentify
function or (deprecated) theOn REST Authentication
database method or Structure settings).
シンタックス
On Web Authentication( $1 : Text ; $2 : Text ; $3 : Text ; $4 : Text ; $5 : Text ; $6 : Text ) -> $0 : Boolean
引数 | 型 | 説明 | |
---|---|---|---|
$1 | Text | <- | URL |
$2 | Text | <- | HTTPヘッダー + HTTPボディ (32 KBまで) |
$3 | Text | <- | Webクライアント (ブラウザー) の IPアドレス |
$4 | Text | <- | サーバーの IPアドレス |
$5 | Text | <- | ユーザー名 |
$6 | Text | <- | パスワード |
$0 | Boolean | -> | True = リクエストは受け入れられました、False = リクエストが拒否されました |
これらの引数を以下のように宣言しなければなりません:
// On Web Authentication データベースメソッド
C_TEXT($1;$2;$3;$4;$5;$6)
C_BOOLEAN($0)
// メソッドのコード