WSS API を使用したコンシューマー・セキュリティー・トークンの構成
ポリシー・セットを使用しなくても、Web Services Security API を使用することで SOAP メッセージをセキュアにすることができます。 コンシューマー側にトークンを構成するには、 Web Services Security API (WSS API) を使用します。コンシューマー・セキュリティー・トークンは、 com.ibm.websphere.wssecurity.wssapi.token インターフェース・パッケージの一部です。
始める前に
WebSphere® Application Server の プラグ可能トークン・フレームワークが設計変更され、 WSS API の同一フレームワークを再利用できるようなりました。セキュリティー・トークンの作成および妥当性検査の実装と同じ実装を、Web Services Security ランタイムと WSS API アプリケーション・コードの両方に使用できます。再設計されたフレームワークにより、SPI プログラミング・モデルもシンプルになり、 セキュリティー・トークン・タイプの追加が容易になります。
WSS API を使用することも、管理コンソールを使用してトークンを構成することもできます。 トークンを構成するには、必要に合わせてジェネレーター・トークンを構成する、トークン・タスクが完了している必要があります。
このタスクについて
ジェネレーター側では、JAAS CallbackHandler と JAAS LoginModule が セキュリティー・トークンを作成する責務を担います。 トークンは JAAS LoginModule を使用して作成され、JAAS CallbackHandler を使用して認証データを受け渡しされます。 次に、JAAS LoginModule は UsernameToken などの securityToken オブジェクトを作成して、それを Web Services Security ランタイムに受け渡します。
コンシューマー側では、 XML フォーマットが妥当性検査または認証用 JAAS LoginModule に受け渡されます。 次に、JAAS CallbackHandler を使用して、認証データが Web Services Security ランタイムから LoginModule に受け渡されます。トークンが認証され、セキュリティー・トークン・オブジェクトが作成された後、トークンは Web Services Security ランタイムに受け渡されます。
コンシューマー・トークンの妥当性検査に WSS API を使用すると、 ある決まったデフォルトの動作が行われます。WSS API を使用する一番簡単な方法は、 デフォルトの JAAS ログイン・モジュールとコールバック・ハンドラーを使用することです。 例では、それらのデフォルトを使用しているので、JAAS ログイン・モジュール名を指定しません。
WSS API を使用する一番簡単な方法は、デフォルトの動作を使用することです (サンプル・コードを参照)。 WSS API は、トークン・タイプ、トークン値、および JAAS 構成名のデフォルトを提供します。 デフォルト・トークンの動作は、以下のとおりです。
コンシューマー・トークンの決定 | デフォルトの動作 |
---|---|
使用するトークン・タイプ | トークン・タイプで、メッセージの署名および妥当性検査に使用するトークンのタイプを指定します。デフォルトの トークン・タイプは X.509 トークンです。 WebSphere Application Server は、 以下の事前構成済みコンシューマー・トークン・タイプを提供します。
必要に応じて、カスタム・トークン・タイプを作成することもできます。 |
指定する JAAS ログイン構成名 | JAAS ログイン構成名で、使用する JAAS ログイン構成名を指定します。 |
使用する構成タイプ | JAAS ログイン・モジュールの構成タイプ。 事前定義コンシューマー構成タイプのみが、コンシューマー・トークン・タイプとして使用できます。 |
SecurityToken クラス (com.ibm.websphere.wssecurity.wssapi.token.SecurityToken) は汎用トークン・クラスであり、識別名、XML フォーマット、および暗号鍵を取得するための方式が含まれているセキュリティー・トークンを表します。 SecurityToken クラスを使用して、シグニチャーと暗号化の両方を SOAP メッセージに適用することができます。 ただし、両方を適用するには、シグニチャー用と暗号化用にそれぞれ 1 つずつ、合計 2 つの SecurityToken オブジェクトが必要です。
以下のトークン・タイプは汎用セキュリティー・トークン・クラスのサブクラスです。
トークン・タイプ | JAAS ログイン構成名 |
---|---|
セキュリティー・コンテキスト・トークン | system.wss.consume.sct |
派生鍵トークン | system.wss.consume.dkt |
以下のトークン・タイプはバイナリー・セキュリティー・トークン・クラスのサブクラスです。
トークン・タイプ | JAAS ログイン構成名 |
---|---|
X.509 トークン | system.wss.consume.x509 |
X.509 PKI Path トークン | system.wss.consume.pkiPath |
X.509 PKCS7 トークン | system.wss.consume.pkcs7 |
- JAAS ログイン・トークン・コンシューマーの構成名ごとに、 それぞれのトークン生成プログラムの構成名があります。 例えば、X509Token の場合、そのトークン生成プログラムの構成名は system.wss.generate.x509 です。
- LTPA および LTPA の伝搬トークンは、サーバー・ベースのクライアントとして実行されている要求側のみが使用できます。 LTPA および LTPA の伝搬トークンは、 Java™ SE 6 または Java EE アプリケーション・クライアントではサポートされません。
コンシューマー側で SOAP メッセージに対して X509Token を妥当性検査するには、<X509Token> エレメントが <wsse:Security> エレメント内に存在する必要があります。
手順
タスクの結果
例
以下のサンプル・コードは、 デフォルトの JAAS ログイン・モジュールおよびコールバック・ハンドラーを使用した暗号化解除用の WSS API コード例です。
// Get the message context
Object msgcontext = getMessageContext();
// Generate the WSSFactory instance (step: a)
WSSFactory factory = WSSFactory.getInstance();
// Generate the WSSConsumingContext instance (step: b)
WSSConsumingContext gencont = factory.newWSSConsumingContext();
// Generate the callback handler (step: c)
X509ConsumeCallbackHandler callbackHandler = new
X509ConsumeCallbackHandler(
"",
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"alice",
"keypass".toCharArray(),
"CN=Alice, O=IBM, C=US");
// Generate the WSSDecryption instance (step: d)
WSSDecryption dec = factory.newWSSDecryption(X509Token.class,
callbackHandler);
// Add WSSDecryption to WSSConsumingContext (step: e)
concont.add(dec);
// Validate the WS-Security header (step: f)
concont.process(msgcontext);
次のタスク
トークン・タイプごとに、WSS API または管理コンソールを使用してトークンを構成します。 次に、まだ指定していない場合は、類似のジェネレーター・トークンを指定します。
ジェネレーター・トークンとコンシューマー・トークンの両方を構成している場合は、 WSS API を使用して応答コンシューマーの SOAP メッセージを引き続きセキュアにするか、または管理コンソールを使用してトークンを構成します。
ジェネレーター・トークンとコンシューマー・トークンの両方を構成している場合は、 必要に応じて、シグニチャーを検査するか、またはメッセージを暗号化解除するかして、SOAP メッセージを引き続きセキュアにします。 SOAP メッセージをセキュアにするには、WSS API を使用することも、管理コンソールを使用することもできます。