メインコンテンツまでスキップ
バージョン: 開発中

認証

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 データベースメソッドを呼び出します (あれば)。 In addition to $urll and $content, only the IP addresses of the browser and the server ($IPClient and $IPServer) are provided, the user name and password ($user and $password) are empty. ユーザー認証が成功した場合、このメソッドは $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 データベースメソッドが呼び出されます。 When the DIGEST mode is activated, the $password parameter (password) is always returned empty. 実際このモードを使用するとき、この情報はネットワークからクリアテキスト (平文) では渡されません。 この場合、接続リクエストは 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 データベースメソッドは呼び出されません:

シンタックス

On Web Authentication( $url : Text ; $content : Text ; $IPClient : Text ; $IPServer : Text ; $user : Text ; $password : Text ) -> $accept : Boolean

引数説明
$urlText<-URL
$contentText<-HTTPヘッダー + HTTPボディ (32 KBまで)
$IPClientText<-Webクライアント (ブラウザー) の IPアドレス
$IPServerText<-サーバーの IPアドレス
$userText<-ユーザー名
$passwordText<-パスワード
$acceptBoolean->True = リクエストは受け入れられました、False = リクエストが拒否されました

これらの引数を以下のように宣言しなければなりません:

// On Web Authentication database method
#DECLARE ($url : Text; $content : Text; \
$IPClient : Text; $IPServer : Text; \
$user : Text; $password : Text) \
-> $accept : Boolean

//Code for the method

On Web Authentication データベースメソッドのすべての引数が必ず値を受け取るわけではありません。 データベースメソッドが受け取る情報は、認証モードの設定により異なります。

$url - URL

The first parameter ($url) is the URL received by the server, from which the host address has been removed.

イントラネット接続の場合をみてみましょう。 4D Webサーバーマシンの IPアドレスを 123.45.67.89 とします。 The following table shows the values of $urll depending on the URL entered in the Web browser:

Webブラウザーに入力された値Value of parameter $urll
123.45.67.89/
http://123.45.67.89/
123.45.67.89/Customers/Customers
http://123.45.67.89/Customers/Add/Customers/Add
123.45.67.89/Do_This/If_OK/Do_That/Do_This/If_OK/Do_That

$content - Header and Body of the HTTP request

The second parameter ($content) is the header and the body of the HTTP request sent by the web browser. この情報は On Web Authentication データベースメソッドに "そのまま" 渡されることに留意してください。 その内容は、接続を試みた Webブラウザーの仕様により異なります。

アプリケーションでこの情報を使用するには、開発者がヘッダーとボディを解析しなければなりません。 WEB GET HTTP HEADERWEB GET HTTP BODY コマンドを使うことができます。

For performance reasons, the size of data passing through the $content parameter must not exceed 32 KB. これを超過する分は、4D HTTPサーバーにより切り取られます。

$IPClient - Web client IP address

The $IPClient parameter receives the IP address of the browser’s machine. この情報を使用して、イントラネットアクセスとインターネットアクセスを区別できます。

4D は IPv4 アドレスを、96-bit の接頭辞付きのハイブリッド型 IPv6/IPv4 フォーマットで返します。たとえば、::ffff:192.168.2.34 は、192.168.2.34 という IPv4 アドレスを意味します。 詳細については、IPv6 のサポートについて の章を参照ください。

$IPServer - Server IP address

The $IPServer parameter receives the IP address used to call the web server. 4D はマルチホーミングをサポートしており、複数の IPアドレスを持つマシンを使用できます。 詳細は 設定ページ を参照ください。

$user and $password - User Name and Password

The $user and $password parameters receive the user name and password entered by the user in the standard identification dialog box displayed by the browser. BASIC または DIGEST 認証が選択されていると、接続のたびにこのダイアログが表示されます。

If the user name sent by the browser exists in 4D, the $password parameter (the user’s password) is not returned for security reasons.

$accept - Function return

The On Web Authentication database method returns a boolean:

  • If it is True, the connection is accepted.

  • If it is False, the connection is refused.

On Web Connection データベースメソッドは、On Web Authentication データベースメソッドにより接続が受け入れられた時にのみ実行されます。

警告
  • If no value is returned, the connection is considered as accepted and the On Web Connection database method is executed.
  • On Web Authentication データベースメソッド内でインターフェース要素を呼び出してはいけません (ALERT, DIALOG 等)。 メソッドの実行が中断され、接続が拒否されてしまいます。 処理中にエラーが発生した場合も同様です。

例題

DIGEST認証モード での On Web Authentication データベースメソッドの例題:

// On Web Authentication データベースメソッド
#DECLARE ($url : Text; $header : Text; $ipB : Text; $ipS : Text; \
$user : Text; $pw : Text) -> $valid : Boolean

var $found : cs.WebUserSelection
$valid:=False

$found:=ds.WebUser.query("User === :1";$user)
If($found.length=1) // ユーザーが見つかった場合
$valid:=WEB Validate digest($user;[WebUser]password)
Else
$valid:=False // ユーザーは存在しません
End if