1.7. フォームベースの認証を有効にする
フォームベースの認証により、ログインのカスタム JSP/HTML ページ、ログイン時にエラーが発生した場合にユーザーが移動される別のページを柔軟に定義することができます。
フォームベースの認証はデプロイメント記述子
web.xml の <login-config> 要素の <auth-method>FORM</auth-method> を含めることにより定義されます。ログインページとエラーページは以下のとおり <login-config> でも定義されます。
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.html</form-error-page>
</form-login-config>
</login-config>
フォームベースの認証を持つ Web アプリケーションがデプロイされる場合、Web コンテナは
FormAuthenticator を使用して、ユーザーを適切なページへ移動します。JBoss Enterprise Application Platform はセッションプールを管理することで、認証情報が各要求に対して存在する必要はありません。 FormAuthenticator が要求を受け取る場合、既存のセッションに対し org.apache.catalina.session.Manager をクエリします。セッションが存在しない場合は、新しいセッションが作成されます。その後、FormAuthenticator がセッションの資格情報を検証します。
注記
各セッションは無作為の値から生成された 16 バイトの文字列であるセッションアイデンティティにより識別されます。こうした値はデフォルトで
/dev/urandom (Linux) から取得され、MD5 でハッシュされます。セッションアイデンティティの作成時にそれが一意であることを確認します。
検証された時点で、セッションアイデンティティはクッキーの一部として割り当てられ、クライアントに返されます。このクッキーは後続のクライアント要求で必要になり、ユーザーセッションを識別するために使用されます。
クライアントに渡されたクッキーはオプションの属性を複数持つ名前と値のペアです。識別子の属性は
JSESSIONID と呼ばれます。その値はセッションアイデンティティの HEX 文字列です。このクッキーは非永続と設定されます。これはクライアント側ではブラウザが存在する場合は削除されることを意味します。サーバー側ではセッションは非アクティブの時間が 60 秒を越えると期限切れになり、その時にセッションオブジェクトと資格情報が削除されます。
例えば、ユーザーがフォームベースの認証で保護されている 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 パラメータが存在しているときだけです。