サーバー・アプリケーションでの JAAS サブジェクトからのトークンの検索

WebSphere® Application Server Version 6 では、セキュリティー・ハンドラーは セキュリティー・トークンの伝搬の責任を担います。 これらのセキュリティー・トークンは、Simple Object Access Protocol (SOAP) セキュリティー・ヘッダーで組み込まれ、ダウンストリーム・サーバーに渡されます。 セキュリティー・トークンは com.ibm.wsspi.wssecurity.auth.token.Token インターフェースの実装クラスでカプセル化されます。 セキュリティー・トークン・ データは、サーバー・アプリケーションまたはクライアント・アプリケーションのいずれかから検索することができます。

サーバー・アプリケーションでは、アプリケーションは要求コンシューマー および応答生成プログラムとして機能し、デプロイされ、Java™ 2 Platform, Enterprise Edition (J2EE) コンテナーで実行されます。 Web サービス・セキュリティーのコンシューマー・コンポーネントは、現行のスレッドの Java 認証・承認サービス (JAAS)・サブジェクトで受け取るセキュリティー・トークンを保管します。 コンテナーでローカル・スレッドとして保守される JAAS サブジェクトからセキュリティー・トークンを 検索することができます。 以下のステップを実行して、サーバー・アプリケーションからセキュリティー・トークン・データを検索します。

  1. WSSubject ユーティリティー・クラスを使用して、現行スレッドの JAAS サブジェクトを取得します。 WebSphere Application Server 管理コンソールの「グローバル・セキュリティー」パネルで 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) {
      …
    }
  2. サブジェクトから専用クリデンシャルのセットを取得します。 詳しくは、インフォメーション・センターを介して、 アプリケーション・プログラミング・インターフェース (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();
    }
       });
  3. 専用クリデンシャルでターゲットとするトークン・クラスを検索します。 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 サブジェクトからセキュリティー・トークンが検索されています。
関連概念
セキュリティー・トークン

フィードバック