Web 認証用の Java Authentication and Authorization Service プログラミング・モデルの使用

WebSphere® Application Server では、Java™ Platform, Enterprise Edition (Java EE) 宣言セキュリティー・モデルをサポートしています。 Java EE デプロイメント記述子を使用して、認証およびアクセス制御ポリシーを定義できます。 カスタム・ログイン・モジュールをさらに積み重ね、WebSphere Application Server 認証メカニズムをカスタマイズできます。

始める前に

カスタム・ログイン・モジュールにより、プリンシパルおよびクレデンシャル・マッピング、 カスタム・セキュリティー・トークン処理およびカスタム・クレデンシャル処理、およびその他の可能性でのエラー処理を実行できます。 通常は、認証機能の実行のためにアプリケーション・コードを使用する必要はありません。 アプリケーション・コードで認証機能を実行する必要がある場合は、このセクションで説明されている プログラミング手法を使用してください。通常は、宣言セキュリティーを使用し、 最後の手段として、このセクションで説明する手法を使用してください。

このタスクについて

Lightweight Third-Party Authentication (LTPA) メカニズムのシングル・サインオン (SSO) オプションが使用可能な場合、 Web クライアント・ログイン・セッションは、ログインの成功後、LTPA SSO トークン Cookie によりトラッキングされます。 ログアウト時には、このトークンは削除されてログイン・セッションは終了しますが、 サーバー・サイドのサブジェクトは削除されません。 宣言セキュリティー・モデルを使用する場合、WebSphere Application Server の Web コンテナーにより、クライアント認証およびログイン・セッション管理が自動的に実行されます。 Java EE セキュリティー制約なしでログイン・ページを設定し、最初にそのログイン・ページにクライアント要求を送信することにより、アプリケーション・コードで認証を実行できます。 ログイン・ページは、Java Authentication and Authorization Service (JAAS) プログラミング・モデルを使用して、認証を実行することができます。 WebSphere Application Server Web ログイン・モジュールを使用可能に設定し、SSO Cookie を生成するには、以下のステップを実行します。

手順

  1. 新規システム・ログイン JAAS 構成を作成します。このパネルにアクセスするには、「セキュリティー」>「グローバル・セキュリティー」とクリックします。 「Java 認証・承認サービス」の下の「システム・ログイン」をクリックします。
  2. WEB_INBOUND ログイン構成を手動で複製し、それに新しい別名を付けます。 ログイン構成を複製するには、「新規」をクリックして、構成の名前を入力し、「適用」をクリックして、「追加プロパティー」の下の「JAAS ログイン・モジュール」をクリックします。 「新規」をクリックして、JAAS ログイン・モジュールを構成します。詳しくは、Java Authentication and Authorization Service 用のログイン・モジュールの設定を参照してください。 WebSphere Application Server Web コンテナーでは、WEB_INBOUND ログイン構成を使用して、Web クライアントを認証します。 WEB_INBOUND ログイン構成を変更すると、セル内のすべての Web アプリケーションが影響を受けます。 WEB_INBOUND ログイン構成の内容を複製して、ユーザーの所有するログイン構成を作成する必要があります。
  3. wsMapDefaultInboundLoginModule」ログイン・モジュールを選択して、「カスタム・プロパティー」をクリックします。ユーザーのログイン構成には、2 つのログイン・モジュール、ltpaLoginModule および wsMapDefaultInboundLoginModule が定義されています。
  4. true の値を付けて、ログイン・プロパティー名 cookie を追加します。 2 つのログイン・モジュールが LTPA SSO Cookie の生成に使用可能になります。 オリジナルの WEB_INBOUND ログイン構成には、Cookie ログイン・オプションを追加しないでください。
  5. オプションで、カスタムの LoginModule (1 つまたは複数) を新しいログイン構成にスタックします。
  6. 新規に定義したログイン構成を使用して、JAAS LoginContext.login を実行することにより、プログラマチック・ログインにログイン・ページを使用します。 ログインの成功後、ltpaLoginModule または wsMapDefaultInboundLoginModule のいずれかにより、認証の成功時に LTPA SSO Cookie が生成されます。 実際にどちらの LoginModule により SSO Cookie が生成されるかは、システム認証構成やランタイムの状態 (このセクションの説明の範囲外) などの、多くの要因に左右されます。
  7. 変更された WSSubject.setRunAsSubject メソッドを呼び出し、認証キャッシュにサブジェクトを追加します。 そのサブジェクトは、LoginModule により作成された WebSphere Application Server JAAS サブジェクトである必要があります。 認証キャッシュへサブジェクトを追加することにより、SSO トークンからのサブジェクトが再作成されます。
  8. WSSecurityHelper クラスから revokeSSOCookies メソッドを起動することにより、プログラマチック・ログアウト・ページを使用して SSO Cookies を取り消します。

    「Cookie」という用語が使用されていますが、その理由は次のとおりです。すなわち、WebSphere Application Server バージョン 5.1.1 以降は、異なる暗号化アルゴリズムを持つ新しい LTPA SSO トークンをサポートしますが、後方互換性のためにオリジナルの LTPA SSO トークンが生成されるように構成できるからです。 そのサブジェクトが認証キャッシュにまだあり、SSO Cookie のみが取り消されることに注意してください。

    非推奨の機能 (Deprecated feature) 非推奨の機能 (Deprecated feature): WSSecurityHelper クラスからの revokeSSOCookies(HttpServletRequest, HttpServletResponse) メソッドは非推奨です。 Java Servlet-3.0 の logout() メソッドが提供する機能を使用してください。 サーブレット・セキュリティー・メソッドを参照してください。depfeat

認証を実行するには、以下のコード例を使用してください。

トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): 以下の例のように、null へのハンドラーを取得するために WSCallbackHandlerFactoryset ファクトリー・クラスを設定すると、パスワードなしで ID アサーションを識別できます。gotcha
Suppose you wrote a LoginServlet.java:

		Import com.ibm.wsspi.security.auth.callback.WSCallbackHandlerFactory;
	Import com.ibm.websphere.security.auth.WSSubject;

		public Object login(HttpServletRequest req, HttpServletResponse res) 
		throws ServletException {

		PrintWriter out = null;
	try {
		out =  res.getWriter();
      res.setContentType("text/html");
	} catch (java.io.IOException e){
		// Error handling
	}

		Subject subject = null;
	try {
		LoginContext lc = new LoginContext("system.Your_login_configuration",
WSCallbackHandlerFactory.getInstance().getCallbackHandler(
userid, null, password, req, res, null));
		lc.login();
				subject = lc.getSubject();
      WSSubject.setRunAsSubject(subject);
	} catch(Exception e) {
				 	// catch all possible exceptions if you want or handle them separately
				out.println("Exception in LoginContext login + Exception = " +
 e.getMessage());
				throw new ServletException(e.getMessage());
	}

The following is sample code to revoke the SSO cookies upon a programming logout:


The LogoutServlet.java:

		public void logout(HttpServletRequest req, HttpServletResponse res,
 Object retCreds)  throws ServletException {
		 		 PrintWriter out =null;
		 try {
		 	out =  res.getWriter();
        res.setContentType("text/html");
		 } catch (java.io.IOException e){
			// Error Handling
		 }
		 try {
		  			  	WSSecurityHelper.revokeSSOCookies(req, res);
		 } catch(Exception e) {
		 			 	// catch all possible exceptions if you want or handle them separately
		 			 	out.println("JAASLogoutServlet: logout Exception = " + e.getMessage());
		 			 	throw new ServletException(e);
		 }
	 }

次のタスク

JAAS 認証について詳しくは、Java Authentication and Authorization Service によるプログラマチック・ログインの開発を参照してください。AuthenLoginModule ログイン・モジュールについて詳しくは、例: サーバー・サイドの Java Authentication and Authorization Service の認証およびログイン構成のカスタマイズを参照してください。

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



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