サーバー・アプリケーションでは、アプリケーションは要求コ
ンシューマーとして機能し、応答ジェネレーターは Java 2 Platform, Enterprise Edition (J2EE) コンテナーでデプロイされ、
実行されます。
Web サービス・セキュリティーのコンシューマー・コンポーネントは、現行のスレッドの
Java Authentication and Authorization Service (JAAS)
サブジェクトで受け取るセキュリティー・トークンを保管します。
コンテナーでローカル・スレッドとして保守される JAAS サブジェクトからセキュリティー・トークンを
検索することができます。
このタスクについて
WebSphere Application Server バージョン 6.1 では、セキュリティー・ハンドラーは
セキュリティー・トークンの伝搬を担います。これらのセキュリティー・トークンは、SOAP
セキュリティー・ヘッダーに組み込まれ、
ダウンストリーム・サーバーに渡されます。
セキュリティー・トークンは
com.ibm.wsspi.wssecurity.auth.token.Token インターフェースのインプリメンテーション・クラスでカプセル化されます。セキュリティー・トークン・
データは、サーバー・アプリケーションまたはクライアント・アプリケーションのいずれかから検索することができます。
以下のステップを実行して、サーバー・アプリケーションからセキュリティー・トークン・データを
検索します。
プロシージャー
- WSSubject ユーティリティー・クラスを使用して、現行スレッドの JAAS サブジェクトを取得します。
管理コンソールの「セキュア管理、アプリケーション、およびインフラストラクチャー」パネルで Java 2
セキュリティーを使用可能にする場合、アプリケーション・コードが
javax.security.auth.AuthPermission("wssecurity.getCallerAsSubject") 許可を付与されていない場合は、
JAAS サブジェクトへのアクセスは拒否されます。次のコード・サンプルで、JAAS サブジェクトの取得方法を示します。
javax.security.auth.Subject subj;
try {
subj = 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 クラスを使用して、
J2EE コンテナーでセキュリティー・オブジェクトを操作することによって発生するセキュリティー違反を
回避する必要がある場合があります。
次のコード・サンプルで、
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 サブジェクトからセキュリティー・トークンが検索されます。