外部セキュリティー・トークン・サービス (STS) に対して、holder-of-key サブジェクト確認方式を用して SAML トークンを発行するように要求できます。
それには、ターゲット・サービスに対して暗号化された対称鍵が伴います。
Java™ API for XML-Based Web Services (JAX-WS) プログラミング・モデルおよび Web Services Security API (WSS API) を使用して、このタスクを実行します。
始める前に
この作業では、JAX-WS プログラミング・モデル、WSS API インターフェース、SAML の概念、および Web サービスの設定を構成および管理するためのポリシー・セットの使用について、ユーザーが十分な知識を持っていることが前提になります。このタスクを開始する前に、以下のアクションを実行します。
- WSS API を使用した、対称鍵による自己発行 SAML holder-of-key トークンの伝搬についての資料を参照してください。
- WSS API を使用して、メッセージ保護のために SAML トークン内でさまざまな埋め込み鍵材料を使用する方法について十分に理解しておいてください。
使用のシナリオでは、自己発行 SAML トークンを使用する代わりに、外部 STS から SAML トークンを要求することが必要です。
- メッセージ・レベルで保護された SAML sender-vouches トークンを外部 STS から要求して、WSS API を使用して伝搬する方法についての資料を参照してください。
- トランスポート・レベルで保護された SAML sender-vouches トークンを外部 STS から要求して、WSS API を使用して伝搬する方法についての資料を参照してください。
- トランスポート・レベルで保護された SAML bearer トークンを外部 STS から要求して、WSS API を使用して伝搬する方法についての資料を参照してください。
- WSS API を使用して外部 STS にアクセスする方法に精通してください。
このタスクについて
ここで取り上げるタスクでは、外部 STS から SAML トークンを要求するコード例を示しています。
この例では、WSS API を使用した、holder-of-key サブジェクト確認方式と、ターゲット・サービス用に暗号化された組み込み対称鍵を使用しています。
このタスクでは、SAML holder-of-key トークン (対称鍵による) を要求するための、外部 STS への WS-Trust 要求メッセージの送信に重点を置いています。
手順
- holder-of-key サブジェクト確認方式を含む SAML セキュリティー・トークンを要求する要求元の STS を指定します。例:
com.ibm.websphere.wssecurity.wssapi.WSSFactory factory =
com.ibm.websphere.wssecurity.wssapi.WSSFactory.getInstance();
WSSGenerationContext gencont1 = factory.newWSSGenerationContext();
WSSConsumingContext concont1 = factory.newWSSConsumingContext();
HashMap<Object, Object> cbackMap1 = new HashMap<Object, Object>();
cbackMap1.put(SamlConstants.STS_ADDRESS, "https://www.example.com/sts"); //STS URL
cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService"); //Target Service
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_SOAP_VERSION, "1.1");
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_WSTRUST_NAMESPACE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512");
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_COLLECTION_REQUEST,
"true"); //RST or RSTC
cbackMap1.put(SamlConstants.TOKEN_TYPE,
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0");
cbackMap1.put(SamlConstants.CONFIRMATION_METHOD, "holder-of-key");
STS から holder-of-key SAML セキュリティー・トークンを要求するには、トラスト要求で KeyType エレメントによって対称鍵と公開鍵のどちらを組み込むかを指定する必要があります。
以下の例では、次のステップに示されているように対称鍵タイプを必要とします。
- SAML セキュリティー・トークンに対称鍵を組み込むように指定します。例えば、以下のようにします。
cbackMap1.put(SamlConstants.KEY_TYPE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey");
SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
cbHandler1.setWSSConsumingContextForTrustClient(concont1);
cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class,
cbHandler1, "system.wss.generate.saml");
要求した SAML トークンには、ターゲット・サービス用に暗号化された対称鍵が含まれています。
また、STS は
WS-Trust RequestedProofToken エレメントにより、暗号化されていない対称鍵も戻します。
以下の例を参照してください。
<wst:RequestedProofToken>
<wst:BinarySecret
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="_27325D34CE4BCC83141288966548620">n68rFQba+XTZLNBfEc4prg==</wst:BinarySecret>
</wst:RequestedProofToken>
RequestedProofToken エレメントは、参照用として記載されています。
WSS API のユーザーに、詳細な処理は公開されていません。
RequestedProofToken エレメントと対称鍵は Web Services Security ランタイム環境によって処理されます。
より厳密に言うと、system.wss.geenrate.saml JAAS ログイン構成で指定されている SAMLGenerateLoginModule によって処理されます。
タスクの結果
ここまでで、WSS API を使用して、holder-of-key サブジェクト確認方式と対称鍵が含まれる SAML トークンを外部 STS から要求するための主要なビルディング・ブロックについて考慮しました。
SAML トークンを使用して要求メッセージに署名するには、『WSS API を使用した、自己発行 SAML holder-of-key トークン (対称鍵による) の伝搬』というトピックに記されているコード例を検討してください。