Web アプリケーション・ログインのカスタマイズ
フォーム・ログイン・ページおよびエラー・ページを作成して、ユーザーを認証することができます。
始める前に
- HTTP 基本認証: Web サーバーが Web クライアントに認証を要求し、Web クライアントは HTTP ヘッダーでユーザー ID とパスワードを渡します。
- HTTPS クライアント認証: このメカニズムでは、ユーザー (Web クライアント) が公開鍵証明書を所有している必要があります。Web クライアントは、この証明書をクライアント証明書を要求する Web サーバーに送信します。この認証メカニズムは強力で、HTTPS プロトコルを使用します。
- フォーム・ベースの認証: 開発者は、この認証メカニズムを使用して、 ログイン画面のルック・アンド・フィールを制御します。
HTTP 基本認証では、ユーザー・パスワードを単純な base64 エンコード方式で Web クライアントから Web サーバーに伝送します。フォーム・ベースの認証では、ユーザー・パスワードをプレーン・テキストでブラウザーから Web サーバーに伝送します。したがって、HTTP 基本認証もフォーム・ベースの認証も、HTTPS プロトコルが使用されない限り、 それほど安全であるとは言えません。
Web アプリケーションのデプロイメント記述子には、使用する認証メカニズムに関する情報が含まれています。フォーム・ベースの認証が使用される場合、デプロイメント記述子には、 ログイン・ページとエラー・ページ用のエントリーも含まれます。 ログイン・ページは、HTML ページか JavaServer Pages (JSP) ファイルのいずれかです。このログイン・ページは、保護されたリソース (サーブレット、JSP ファイル、HTML ページ) にアプリケーションからアクセスする場合に、Web クライアント・サイドに表示されます。認証に失敗すると、エラー・ページが表示されます。アプリケーションのニーズに合ったログイン・ページやエラー・ページを作成し、 それらのページのルック・アンド・フィールを制御することができます。 アプリケーションのアセンブリー時に、アセンブラーはそのアプリケーションの 認証メカニズムを設定して、デプロイメント記述子でログイン・ページおよび エラー・ページを設定することができます。
- sendRedirect メソッドは、まずフォーム・ログイン・ページを Web ブラウザーに表示します。このメソッドは、後で Web ブラウザーを、最初に要求した保護ページにリダイレクトします。sendRedirect(String URL) メソッドは、Web アドレスで指定されるページの取得に HTTP GET 要求を使用するよう Web ブラウザーに通知します。HTTP POST が保護サーブレットまたは JavaServer Pages (JSP) ファイルへの最初の要求であり、 以前に認証またはログインが行われていない場合は、HTTP POST は要求されたページに送達されません。ただし、 HTTP GET は配信されます。これは、フォーム・ログインが、 ログイン後に要求されたページを表示しようとする HTTP GET 要求として動作する sendRedirect メソッドを使用するためです。
- HTTP POST を使用していると、次のようなシナリオを経験することがあります。 このシナリオでは、無保護 HTML フォームがデータをユーザーから収集し、 そのデータを処理するよう保護サーブレットまたは JSP ファイルに通知しますが、 ユーザーはそのリソースに対してはログインしていないのです。 このシナリオを予防するには、アプリケーションが保護サーブレットまたは JSP ファイルに対して HTTP POST アクションを実行する前に、ユーザーがフォーム・ログイン・ページの使用を強制されるように、Web アプリケーションまたは許可を構成します。
手順
例: フォーム・ログイン
- Java EE フォーム・ベース・ログイン
- ログインでの Java EE サーブレット・フィルター
- IBM® 拡張: フォーム・ベースのログイン
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="text" name="j_password" autocomplete="off">
<\form>
ユーザー名の取得には「j_username」入力フィールドを使用し、ユーザーのパスワードの取得には「j_password」入力フィールドを使用します。
Web クライアントから要求を受信すると、Web サーバーは構成済みの「フォーム」ページをクライアントに送信して、オリジナルの要求を保存します。Web サーバーは完成した「フォーム」ページを Web クライアントから受信すると、そのフォームからユーザー名とパスワードを抽出してユーザーを認証します。認証が正常に行われると、Web サーバーはオリジナルの要求への呼び出しをリダイレクトします。認証に失敗した場合は、Web サーバーは構成済みのエラー・ページへの呼び出しをリダイレクトします。
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title> Security FVT Login Page </title>
<body>
<h2>Form Login</h2>
<FORM METHOD=POST ACTION="j_security_check">
<p>
<font size="2"> <strong> Enter user ID and password: </strong></font>
<BR>
<strong> User ID</strong> <input type="text" size="20" name="j_username">
<strong> Password </strong> <input type="password" size="20" name="j_password" autocomplete="off">
<BR>
<BR>
<font size="2"> <strong> And then click this button: </strong></font>
<input type="submit" name="login" value="Login">
</p>
</form>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head><title>A Form login authentication failure occurred</head></title>
<body>
<H1><B>A Form login authentication failure occurred</H1></B>
<P>Authentication may fail for one of many reasons. Some possibilities include:
<OL>
<LI>The user-id or password may be entered incorrectly; either misspelled or the
wrong case was used.
<LI>The user-id or password does not exist, has expired, or has been disabled.
</OL>
</P>
</body>
</html>
<login-config id="LoginConfig_1">
<auth-method>FORM<auth-method>
<realm-name>Example Form-Based Authentication Area</realm-name>
<form-login-config id="FormLoginConfig_1">
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
META-INF
META-INF/MANIFEST.MF
login.html
error.jsp
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/aServlet.class
フォーム・ログアウト は、 すべての Web ブラウザー・セッションを閉じることなくログアウトするメカニズムです。 フォーム・ログアウト・メカニズムからログアウト後に、保護されている Web リソースにアクセスするには、再認証が必要です。この機能は、J2EE 仕様では必須ではありませんが、WebSphere Application Server のセキュリティーの追加機能として提供されています。
- ログアウト・フォーム URI が Web ブラウザーで指定され、フォームをロードします。
- ユーザーは、フォームの「サブミット」をクリックしログアウトします。
- WebSphere Application Server のセキュリティー・コードにより、
ユーザーがログアウトします。
このプロセス中、Application Server は、以下のプロセスを完了します。
- Lightweight Third Party Authentication (LTPA)/シングル・サインオン (SSO) Cookie をクリアします
- HTTP セッションを無効化します
- 認証キャッシュからユーザーを除去します
- ログアウト後、ユーザーは、ログアウト出口ページにリダイレクトされます。
フォーム・ログアウトでは、デプロイメント記述子内の属性は必要ありません。 フォーム・ログアウト・ページは、Web アプリケーションに組み込まれている HTML ファイルまたは JavaServer Pages (JSP) ファイルです。フォーム・ログアウト・ページは、 大部分の HTML フォームに似ていますが、フォーム・ログイン・ページのように、 Web コンテナーによって認識される特別な事後アクションがあるところが違います。 この事後アクションは、Web コンテナーによって、特別な内部フォーム・ログアウト・サーブレットにディスパッチされます。フォーム・ログアウト・ページの事後アクションは、ibm_security_logout でなければなりません。
ログアウト・フォームでログアウト出口ページを指定することができます。この出口ページは、ログアウト後のユーザーのリダイレクト先である、同じ Web アプリケーション内の HTML ファイルまたは JSP ファイルを表すことができます。 また、ログアウト出口ページでは、http://hostname:port/URL という形式の、 完全修飾 URL が許可されています。 ログアウト出口ページは、フォーム・ログアウト・ページ内のパラメーターとして指定されます。ログアウト出口ページが指定されない場合、デフォルトのログアウト HTML メッセージがユーザーに戻されます。
<!DOCTYPE HTML PUBliC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title>Logout Page </title>
<body>
<h2>Sample Form Logout</h2>
<FORM METHOD=POST ACTION="ibm_security_logout" NAME="logout">
<p>
<BR>
<BR>
<font size="2"><strong> Click this button to log out: </strong></font>
<input type="submit" name="logout" value="Logout">
<INPUT TYPE="HIDDEN" name="logoutExitPage" VALUE="/login.html">
</p>
</form>
</body>
</html>