8.2.8. フォームベースの認証の有効化
フォームベースの認証では、ログイン用にカスタム JSP/HTML ページを柔軟に定義でき、ログイン時にエラーが発生する場合にユーザーにダイレクトする別のページを利用できます。
フォームベースの認証は、デプロイメント記述子
web.xml の <auth-method>FORM</auth-method> 要素に <login-config> を含めることで定義されます。ログインおよびエラーページは、以下のように <login-config> でも定義されています。
フォームベースの認証のある Web アプリケーションがデプロイされると、Web コンテナーは
FormAuthenticator を使用してユーザーを適切なページに転送します。JBoss EAP はセッションプールを維持するため、各リクエストに認証情報を追加する必要はありません。FormAuthenticator がリクエストを受信すると、既存のセッションに対して org.apache.catalina.session.Manager をクエリーします。セッションが存在しない場合は、新しいセッションが作成されます。FormAuthenticator は、セッションの認証情報を検証します。
認証要求
各セッションは、ランダムな値から生成される 16 バイトの文字列であるセッション ID で識別されます。この値はデフォルトで
/dev/urandom (Linux)から取得され、MD5 でハッシュ化されます。チェックはセッション ID の作成時に実行され、作成された ID が一意であることを確認します。
確認されると、セッション ID はクッキーの一部として割り当てられ、クライアントに戻ります。このクッキーは後続のクライアント要求で予想され、ユーザーセッションを識別するために使用されます。
クライアントに渡されるクッキーは、複数の任意の属性を持つ名前/値のペアです。識別子属性は
JSESSIONID と呼ばれます。この値は、セッション ID の 16 進文字列です。このクッキーは永続的ではないように設定されています。つまり、クライアント側ではブラウザーが終了すると削除されます。サーバー側では、セッションが 30 分後に非アクティブになると有効期限が切れ、セッションオブジェクトとその認証情報情報が削除されます。
ユーザーがフォームベースの認証で保護されている Web アプリケーションにアクセスしようとするとします。
FormAuthenticator はリクエストをキャッシュし、必要に応じて新しいセッションを作成し、ユーザーを login-config で定義されたログインページにリダイレクトします。(上記の例のコードでは、ログインページは login.html です。) 次に、ユーザーは提供された HTML フォームにユーザー名とパスワードを入力します。ユーザー名とパスワードは、j_security_check フォームアクションを介して FormAuthenticator に渡されます。
次に
FormAuthenticator は、Web アプリケーションコンテキストに割り当てられたレルムに対してユーザー名とパスワードを認証します。JBoss Enterprise Application Platform では、レルムは JBossWebRealm です。認証に成功すると、FormAuthenticator はキャッシュから保存されたリクエストを取得し、ユーザーを元の要求にリダイレクトします。
注記
サーバーは、URI が
/j_security_check で終わり、少なくとも j_username および j_password パラメーターが存在する場合のみ、フォーム認証要求を認識します。