WebSphere Application Server Network Deployment for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

             目次と検索結果のパーソナライズ化

サーバー・サイドの Java Authentication and Authorization Service の認証およびログイン構成のカスタマイズ

WebSphere Application Server は、 WebSphere Application Server のシステム・ログイン・モジュールの前または後に、 カスタム Java Authentication and Authorization Service (JAAS) のログイン・モジュールのプラグインをサポートします。 ただし、WebSphere Application Server は、 WebSphere Application Server システム・ログイン・モジュールを置き換えることはしません。 サブジェクトで WSCredential クレデンシャルおよび WSPrincipal プリンシパルを作成する際に、 WebSphere Application Server システム・ログイン・モジュールを使用する ためです。 カスタム・ログイン・モジュールを使用して、追加の認証決定を行うか、または サブジェクトに情報を追加して、Java 2 Platform, Enterprise Edition (J2EE) アプリケーション内で、 細分化可能な追加の許可決定を行うことができます。

WebSphere Application Server を使用すると、 カスタム・ログイン・モジュールによって subject に追加される情報をダウンストリームへ伝搬できます。 詳しくは、セキュリティー属性の伝搬 を参照してください。 カスタム・ログイン・モジュールのプラグインに使用するログイン構成の判別については、 Java Authentication and Authorization Service 用のシステム・ログイン構成エントリー設定 にある ログイン構成の説明を参照してください。

WebSphere Application Server では、 管理コンソールを介し、wsadmin スクリプト・ユーティリティーを使用して、 システム・ログイン構成の変更をサポートします。 管理コンソールを使ってシステム・ログインを構成するには、 「セキュリティー」>「管理、アプリケーション、およびインフラストラクチャーの保護」をクリックします。「Java Authentication and Authorization Service」の下の「システム・ログイン」をクリックします。

wsadmin ツールを使用してシステム・ログイン構成を構成するには、 以下のコード・サンプルを参照してください。 以下のサンプル Jacl スクリプトで、 Lightweight Third-party Authentication (LTPA) Web システム・ログイン構成に カスタム・ログイン・モジュールが追加されます。

重要: 以下のコード・サンプルの 32 行、33 行、および 34 行は、 2 行に分割されています。
1.	#########################################
2.	#
3.	# Open security.xml
4.	#
5.	#########################################
6.	
7.	
8.	set sec [$AdminConfig getid /Cell:hillside/Security:/]
9.	
10.	
11.	#########################################
12.	#
13.	# Locate systemLoginConfig
14.	#
15.	#########################################
16.	
17.	
18.	set slc [$AdminConfig showAttribute $sec systemLoginConfig]
19.	
20.	set entries [lindex [$AdminConfig showAttribute $slc entries] 0]
21.	
22.	
23.	#########################################
24.	#
25.	# Append a new LoginModule to LTPA_WEB
26.	#
27.	#########################################
28.	
29.	foreach entry $entries {
30.	set alias [$AdminConfig showAttribute $entry alias]
31.	if {$alias == "LTPA_WEB"} {
32.	      set newJAASLoginModuleId [$AdminConfig create JAASLoginModule $entry {{moduleClassName "com.ibm.ws.security.common.auth.module.proxy.WSLoginModuleProxy"}}]
33.	      set newPropertyId [$AdminConfig create Property $newJAASLoginModuleId {{name delegate}{value "com.ABC.security.auth.CustomLoginModule"}}]
34.	$AdminConfig modify $newJAASLoginModuleId {{authenticationStrategy REQUIRED}}
35.	      break
36.	   }
37.	}
38.	
39.	
40.	#########################################
41.	#
42.	# save the change
43.	#
44.	#########################################
45.	
46.	$AdminConfig save
47.	
重要: wsadmin スクリプト・ユーティリティーは、 リストの最後に新規オブジェクトを挿入します。AuthenLoginModule ログイン・モジュールの前に カスタム・ログイン・モジュールを挿入するには、AuthenLoginModule ログイン・モジュールを削除し、 カスタム・ログイン・モジュールを挿入後に再作成します。 ファイル sample.jacl にサンプル・スクリプトを保管し、 次のコマンドを使用してそのサンプル・スクリプトを実行します。
wsadmin -f sample.jacl
次のサンプル Jacl スクリプトを使用すると、 現行の LTPA_WEB ログイン構成とすべてのログイン・モジュールを除去することができます。
48.	#########################################
49.	#
50.	# Open security.xml
51.	#
52.	#########################################
53.	
54.	
55.	set sec [$AdminConfig getid /Cell:hillside/Security:/]
56.	
57.	
58.	#########################################
59.	#
60.	# Locate systemLoginConfig
61.	#
62.	#########################################
63.	
64.	
65.	set slc [$AdminConfig showAttribute $sec systemLoginConfig]
66.	
67.	set entries [lindex [$AdminConfig showAttribute $slc entries] 0]
68.	
69.	
70.	#########################################
71.	#
72.	# Remove the LTPA_WEB login configuration
73.	#
74.	#########################################
75.	
76.	foreach entry $entries {
77.	   set alias [$AdminConfig showAttribute $entry alias]
78.	   if {$alias == "LTPA_WEB"} {
79.	      $AdminConfig remove $entry
80.	      break
81.	   }
82.	}
83.	
84.	
85.	#########################################
86.	#
87.	# save the change
88.	#
89.	#########################################
90.	
91.	$AdminConfig save
次のサンプル Jacl スクリプトを使用すると、 オリジナルの LTPA_WEB 構成をリカバリーすることができます。
重要: 以下のコード・サンプルの 122、124、および 126 行は、 表示上の理由で複数の行に分割されています。
92.	#########################################
93.	#
94.	# Open security.xml
95.	#
96.	#########################################
97.	
98.	
99.	set sec [$AdminConfig getid /Cell:hillside/Security:/]
100.	
101.	
102.	#########################################
103.	#
104.	# Locate systemLoginConfig
105.	#
106.	#########################################
107.	
108.	
109.	set slc [$AdminConfig showAttribute $sec systemLoginConfig]
110.	
111.	set entries [lindex [$AdminConfig showAttribute $slc entries] 0]
112.	
113.	                                                              
114.	                                                                
115.	#########################################
116.	#
117.	# Recreate the LTPA_WEB login configuration
118.	#
119.	#########################################
120.	
121.	
122.	set newJAASConfigurationEntryId [$AdminConfig create JAASConfigurationEntry $slc {{alias LTPA_WEB}}]
123.	
124.	set newJAASLoginModuleId [$AdminConfig create JAASLoginModule $newJAASConfigurationEntryId {{moduleClassName "com.ibm.ws.security.common.auth.module.proxy.WSLoginModuleProxy"}}]
125.	
126.	set newPropertyId [$AdminConfig create Property $newJAASLoginModuleId {{name delegate}{value "com.ibm.ws.security.web.AuthenLoginModule"}}]
127.	
128.	$AdminConfig modify $newJAASLoginModuleId {{authenticationStrategy REQUIRED}}
129.	
130.	
131.	#########################################
132.	#
133.	# save the change
134.	#
135.	#########################################
136.	
137.	$AdminConfig save

WebSphere Application Server バージョン ltpaLoginModule ログイン・モジュール および AuthenLoginModule ログイン・モジュールは、共用の状態を使用して状態情報を保管するため、 カスタム・ログイン・モジュールでその情報を変更することができます。ltpaLoginModule ログイン・モジュールは次のコードを使用して、 login メソッドでコールバック配列を初期化します。コールバック配列は、 配列が共用状態の領域で定義されない場合のみ、ltpaLoginModule ログイン・モジュールによって作成されます。 次のコード・サンプルでは、 サンプルを簡潔にするためにエラー処理コードが除去されています。 ltpaLoginModule ログイン・モジュールの前にカスタム・ログイン・モジュールを挿入する場合、 カスタム・ログイン・モジュールは、同じスタイルに従って、共用の状態にコールバックを保管する場合があります。

重要: 以下のコード・サンプルでは、コードのいくつかの行が表示上の理由で 2 行に分割されています。
138.	        Callback callbacks[] = null;
139.	        if (!sharedState.containsKey( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY)) {
140.	            callbacks = new Callback[3];
141.	            callbacks[0] = new NameCallback("Username: ");
142.	            callbacks[1] = new PasswordCallback("Password: ", false);
143.			callbacks[2] = new com.ibm.websphere.security.auth.callback.
                 WSCredTokenCallbackImpl ("Credential Token: ");
144.	try {
145.	                callbackHandler.handle(callbacks);
146.	            } catch (java.io.IOException e) {
147.	                . . .
148.	           } catch (UnsupportedCallbackException uce) {
149.	                . . .
150.	           }
151.	            sharedState.put( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY, callbacks);
152.	} else {
153.	            callbacks = (Callback []) sharedState.get( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY);
154.	        }

ltpaLoginModule ログイン・モジュールおよび AuthenLoginModule ログイン・モジュールは、 WSPrincipal オブジェクトと WSCredential オブジェクトの両方を生成し、 認証済みユーザー ID とセキュリティー・クレデンシャルを 表します。WSPrincipal オブジェクトおよび WSCredential オブジェクトも、 共用の状態に保管されます。JAAS ログインは、2 フェーズ・コミット・プロトコルを使用します。

最初に、ログイン構成で構成された、ログイン・モジュールのログイン・メソッドが呼び出されます。 次に、それらのコミット・メソッドが呼び出されます。ltpaLoginModule ログイン・モジュール および AuthenLoginModule ログイン・モジュールの後に挿入されたカスタム・ログイン・モジュールは、 WSPrincipal オブジェクトおよび WSCredential オブジェクトがコミットされる前に、これらを変更することができます。 WSCredential オブジェクトおよび WSPrincipal オブジェクトは、ログインが完了後、サブジェクトに存在しなければなりません。 サブジェクト内にこれらのオブジェクトがない場合、WebSphere Application Server ランタイム・コードは、 セキュリティー決定を行うサブジェクトをリジェクトします。

AuthenLoginModule は次のコードを使用して、コールバック配列を初期化します。

重要: 以下のコード・サンプルでは、コードのいくつかの行が表示上の理由で 2 行に分割されています。
155.	        Callback callbacks[] = null;
156.	        if (!sharedState.containsKey( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY)) {
157.	            callbacks = new Callback[6];
158.	            callbacks[0] = new NameCallback("Username: ");
159.	            callbacks[1] = new PasswordCallback("Password: ", false);
160.	            callbacks[2] = new com.ibm.websphere.security.auth.callback.WSCredTokenCallbackImpl( "Credential Token: ");			
161.	            callbacks[3] = new com.ibm.wsspi.security.auth.callback.WSServletRequestCallback( "HttpServletRequest: ");
162.	            callbacks[4] = new com.ibm.wsspi.security.auth.callback.WSServletResponseCallback( "HttpServletResponse: ");
163.	            callbacks[5] = new com.ibm.wsspi.security.auth.callback.WSAppContextCallback( "ApplicationContextCallback: ");
164.	try {
165.	                callbackHandler.handle(callbacks);
166.	            } catch (java.io.IOException e) {
167.	              . . .
168.	            } catch (UnsupportedCallbackException uce {
169.	              . . .
170.	            }
171.	            sharedState.put( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY, callbacks);
172.	} else {
173.	            callbacks = (Callback []) sharedState.get( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY);
174.	        }

ログイン用のコールバック情報が含まれる他の 3 つのオブジェクト (java.util.Map、HttpServletRequest、および HttpServletResponse オブジェクト) が、 Web コンテナーから AuthenLoginModule ログイン・モジュールに渡されます。 これらのオブジェクトは、Web アプリケーション・コンテキストを表します。WebSphere Application Server バージョン 5.1 の アプリケーション・コンテキストである java.util.Map オブジェクトには、 アプリケーション名と、エラー・ページの Web アドレスが含まれます。WSAppContextCallback オブジェクト上で getContext() メソッドを呼び出して、アプリケーション・コンテキスト java.util.Map オブジェクトを取得することができます。 java.util.Map オブジェクトは、 次のデプロイメント記述子情報を使用して作成されます。

重要: 以下のコード・サンプルでは、コードのいくつかの行が表示上の理由で 2 行に分割されています。
175.	       HashMap appContext = new HashMap(2);
176.	       appContext.put( com.ibm.wsspi.security.auth.callback.Constants.WEB_APP_NAME, web_application_name);
177.	       appContext.put( com.ibm.wsspi.security.auth.callback.Constants.REDIRECT_URL, errorPage);

アプリケーション名および HttpServletRequest オブジェクトは、 カスタム・ログイン・モジュールがマッピング機能を実行する際に読み取られることがあります。フォーム・ベースの ログインのエラー・ページは、カスタム・ログイン・モジュールによって変更される可能性があります。 JAAS フレームワークのほかに、WebSphere Application Server は、 トラスト・アソシエーション・インターフェース (TAI) をサポートします。

他のクレデンシャル・タイプおよび情報は、 カスタム・ログイン・モジュールを使用した認証プロセス中に、呼び出し側サブジェクトに追加することができます。呼び出し側サブジェクトの サード・パーティー・クレデンシャルは、WebSphere Application Server によって、セキュリティー・コンテキストの一部として管理されます。 呼び出し側サブジェクトは、要求の処理中に、実行スレッドにバインドされます。 Web または Enterprise JavaBeans (EJB) モジュールが、呼び出し側の ID を使用するように構成されている場合、 ユーザー ID は EJB 要求のダウンストリーム・サービスに伝搬されます。WSCredential クレデンシャル および呼び出し側サブジェクト内の任意のサード・パーティー・クレデンシャルは、ダウンストリームに伝搬されません。 その代わり、一部の情報は、伝搬された ID に基づいてターゲット・サーバーで再生成することができます。 認証段階で、サード・パーティー・クレデンシャルを呼び出し側サブジェクトに追加します。 WSSubject.getCallerSubject メソッドから戻される呼び出し側サブジェクトは、 読み取り専用であるため、変更することはできません。 WSSubject サブジェクトについて詳しくは、 例: スレッドからの呼び出し元サブジェクトの取得 を参照してください。




サブトピック
システム・ログイン構成用のカスタム・ログイン・モジュール開発
例: スレッドからの呼び出し元サブジェクトの取得
例: スレッドからの RunAs サブジェクトの取得
例: スレッド上の RunAs サブジェクトのオーバーライド
例: キャッシュからのユーザーの取り消し
関連概念
セキュリティー属性の伝搬
関連タスク
Java Authentication and Authorization Service によるアプリケーション・ログインの カスタマイズ
関連資料
例: スレッドからの呼び出し元サブジェクトの取得
Java Authentication and Authorization Service 用のシステム・ログイン構成エントリー設定
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 8:28:52 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.iseries.doc/info/iseriesnd/ae/rsec_custsvrsidejaas.html