Web アプリケーション・ログインのカスタマイズ

フォーム・ログイン・ページおよびエラー・ページを作成して、ユーザーを認証することができます。

始める前に

Web クライアントまたは Web ブラウザーは、以下のメカニズムのいずれかを使用して、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 メソッドを使用します。 このメソッドは、ユーザーにいくつかの影響を及ぼします。 sendRedirect メソッドは、フォーム・ログインの際に、以下のように 2 回使用されます。
  • 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 アプリケーションまたは許可を構成します。
注: フォーム・ログイン・ページに組み込まれているすべてのファイル (外部スタイル・シートやイメージなど) が無保護であることを確認してください。

手順

  1. フォーム・ベースの認証の実行に必要なエレメントを含む、 必要な外観のフォーム・ログイン・ページを作成します。
  2. エラー・ページを作成します。 認証の再試行を求めるか、 適切なエラー・メッセージを表示するエラー・ページをプログラムすることができます。
  3. Web アプリケーション・アーカイブ (.war) ファイルのトップ・ディレクトリーに相当する場所にログイン・ページとエラー・ページを配置します。例えば、デプロイメント記述子でログイン・ページが /login.html として構成されている場合、 このページは WAR ファイルのトップ・ディレクトリーに配置してください。アセンブラーは、このステップを実行するのにアセンブリー・ツールを使用することもできます。
  4. Web アプリケーションがフォーム・ベースの認証メカニズムを必要とする場合のみ、「フォーム・ログアウト」ページを作成し、アプリケーションに挿入します。

    デフォルトでは、ログアウト・ページの URL は、要求が作成されたホストまたはそのドメインを指している必要があります。それ以外の場合は、汎用ログアウト・ページが表示されます。この URL が別のホストを指すようにする必要がある場合は、security.xml 内にログアウト・ページで使用可能な URL のリストとともに com.ibm.websphere.security.logoutExitPageDomainList プロパティーを設定する必要があります。com.ibm.websphere.security.allowAnyLogoutExitPageHost プロパティーの値を true にすると、任意のログアウト出口ページが使用されるようにすることができます。このプロパティーの値を true に設定すると、場合によっては、システムが潜在的な URL リダイレクト攻撃を受ける危険性が生じます。

例: フォーム・ログイン

WebSphere® Application Server ログイン機能を使用して、フォーム・ログイン手順の実装と構成を行うことができます。WebSphere Application Server および Java™ Platform, Enterprise Edition (Java EE) のログイン機能では以下のテクノロジーを使用します。
  • Java EE フォーム・ベース・ログイン
  • ログインでの Java EE サーブレット・フィルター
  • IBM® 拡張: フォーム・ベースのログイン
フォーム・ログイン・サンプルは、Technology Samples パッケージの一部です。フォーム・ログイン・サンプルへのアクセス方法について詳しくは、『サンプルへのアクセス』を参照してください。
フォーム・ログインの使用法
認証を適切に進めるためには、ログイン・フォームのアクションが常に j_security_check アクションになっていなければなりません。以下の例は、フォームを HTML ページにコーディングする方法を示しています。
<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 サーバーは構成済みのエラー・ページへの呼び出しをリダイレクトします。

以下に、HTML のログイン・ページ (login.html) の例を挙げます。
<!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>
JSP ファイルのエラー・ページの例を以下に示します。
<!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>
アセンブラーが、形式ベースの認証を使用するように Web アプリケーションを構成した後には、デプロイメント記述子に以下に示すログイン構成が含まれます。
<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>
上記のログイン構成のログイン・ページとエラー・ページを示す Web アプリケーション・アーカイブ (WAR) ファイル・ディレクトリー構造の例は、次のようになります。
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 のセキュリティーの追加機能として提供されています。

Web アプリケーションにログインし、アクションを実行した後、ログアウトする場合を想定します。フォーム・ログアウトは、 次のように行われます。
  1. ログアウト・フォーム URI が Web ブラウザーで指定され、フォームをロードします。
  2. ユーザーは、フォームの「サブミット」をクリックしログアウトします。
  3. WebSphere Application Server のセキュリティー・コードにより、 ユーザーがログアウトします。 このプロセス中、Application Server は、以下のプロセスを完了します。
    1. Lightweight Third Party Authentication (LTPA)/シングル・サインオン (SSO) Cookie をクリアします
    2. HTTP セッションを無効化します
    3. 認証キャッシュからユーザーを除去します
  4. ログアウト後、ユーザーは、ログアウト出口ページにリダイレクトされます。

フォーム・ログアウトでは、デプロイメント記述子内の属性は必要ありません。 フォーム・ログアウト・ページは、Web アプリケーションに組み込まれている HTML ファイルまたは JavaServer Pages (JSP) ファイルです。フォーム・ログアウト・ページは、 大部分の HTML フォームに似ていますが、フォーム・ログイン・ページのように、 Web コンテナーによって認識される特別な事後アクションがあるところが違います。 この事後アクションは、Web コンテナーによって、特別な内部フォーム・ログアウト・サーブレットにディスパッチされます。フォーム・ログアウト・ページの事後アクションは、ibm_security_logout でなければなりません。

ログアウト・フォームでログアウト出口ページを指定することができます。この出口ページは、ログアウト後のユーザーのリダイレクト先である、同じ Web アプリケーション内の HTML ファイルまたは JSP ファイルを表すことができます。 また、ログアウト出口ページでは、http://hostname:port/URL という形式の、 完全修飾 URL が許可されています。 ログアウト出口ページは、フォーム・ログアウト・ページ内のパラメーターとして指定されます。ログアウト出口ページが指定されない場合、デフォルトのログアウト HTML メッセージがユーザーに戻されます。

フォーム・ログアウト 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>

次のタスク

ログイン・ページとエラー・ページを開発したら、 それを Web アプリケーションに追加してください。アセンブリー・ツールを使用して、認証メカニズムを構成し、 開発したログイン・ページとエラー・ページをアプリケーションのデプロイメント記述子に挿入します。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_pofolo
ファイル名:tsec_pofolo.html