サーバー・アプリケーションでは、アプリケーションは
要求コンシューマーとして機能し、応答ジェネレーターは
Java™ Platform, Enterprise Edition
(Java EE) コンテナーでデプロイされ、実行されます。Web Services Security のコンシューマー・コンポーネントは、現行のスレッドの Java Authentication and Authorization Service (JAAS) サブジェクトで受け取るセキュリティー・トークンを保管します。コンテナーでローカル・スレッドとして保守される JAAS サブジェクトからセキュリティー・トークンを
検索することができます。
このタスクについて
この情報は、Java API for XML-based Web Services (JAX-WS) に対してのみ適用されます。
セキュリティー・ハンドラーは
セキュリティー・トークンの伝搬を担います。
これらのセキュリティー・トークンは、SOAP
セキュリティー・ヘッダーに組み込まれ、
ダウンストリーム・サーバーに渡されます。
セキュリティー・トークンは
com.ibm.wsspi.wssecurity.auth.token.Token インターフェースの実装クラスでカプセル化されます。セキュリティー・トークン・
データは、サーバー・アプリケーションまたはクライアント・アプリケーションのいずれかから検索することができます。
以下のステップを実行して、サーバー・アプリケーションからセキュリティー・トークン・データを
検索します。
手順
- WSSubject API を使用して、現行スレッドの JAAS サブジェクトを取得します。 管理コンソールの「グローバル・セキュリティー」パネルで
Java
2 セキュリティーを使用可能にするときに、アプリケーション・コードが
javax.security.auth.AuthPermission("wssecurity.getCallerSubject") 許可を付与されていない場合は、JAAS サブジェクトへのアクセスは拒否されます。次のコード・サンプルで、JAAS サブジェクトの取得方法を示します。
javax.security.auth.Subject subject;
try {
subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject();
} catch (com.ibm.websphere.security.WSSecurityException e) {
…
}
- サブジェクトから専用クレデンシャル・セットを取得します。 詳しくは、インフォメーション・センターを介して、
アプリケーション・プログラミング・インターフェース (API) com.ibm.websphere.security.auth.WSSubject クラスを参照してください。
インフォメーション・センター内のこの情報にアクセスするには、「参照」>「Developer」>「API Documentation」>「Application
Programming Interfaces」とクリックします。「Application Programming Interfaces」の項目で、「com.ibm.websphere.security.auth」>「WSSubject」とクリックします。
重要: Java
2 セキュリティーが使用可能であるときに、AccessController クラスを使用して、
Java
EE コンテナーでセキュリティー・オブジェクトを操作することによって発生するセキュリティー違反を回避する必要がある場合があります。
次のコード・サンプルで、
AccessController クラスを設定し、専用クレデンシャルを取得する方法を示します。
Set s = (Set) AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return subj.getPrivateCredentials();
}
});
- 専用クレデンシャルでターゲットとするトークン・クラスを検索します。 java.util.Iterator インターフェースを使用して、ターゲットとするトークン・クラスを検索することができます。
次の例は、セキュリティー・ヘッダーで、特定のトークン ID 値を持つユーザー名トークンを検索する方法について示しています。
他のメソッド呼び出しを使用して、セキュリティー・トークンを検索することもできます。
詳しくは、
com.ibm.wsspi.wssecurity.auth.token.Token インターフェースまたはカスタム・トークン・クラスの
アプリケーション・プログラミング・インターフェース (API) の資料を参照してください。
com.ibm.wsspi.wssecurity.auth.token.UsernameToken unt;
Iterator it = s.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj != null &&
obj instanceOf com.ibm.wsspi.wssecurity.auth.token.UsernameToken) {
unt =(com.ibm.wsspi.wssecurity.auth.token.UsernameToken) obj;
if (unt.getId().equals(“…”)) break;
else continue;
}
}
タスクの結果
これらのステップが完了すると、サーバー・アプリケーションで JAAS サブジェクトからセキュリティー・トークンが検索されます。