WS-Trust Client API

WS-Trust Client アプリケーション・プログラミング・インターフェース (API) には、 WSSTrustClient クラス、WSSTrustClientValidateResult クラス、 およびその他の構成ユーティリティー・クラスが含まれています。WSSTrustClient クラス が提供するヘルパー関数は、指定された外部 セキュリティー・トークン・サービス (STS) に WS-Trust SOAP 要求を送信して、 STS が 1 つ以上の SAML アサーションおよび他のタイプのセキュリティー・トークンを発行または検証 できるようにします。

概要

WebSphere® Application Server には、WS-Trust クライアント機能が組み込まれています。この機能は、 指定された外部セキュリティー・トークン・サービス (STS) に WS-Trust SOAP 要求を送信する WSSTrustClient クラス を通して実装されます。送信されたトラスト要求を使用して、STS は 1 つ以上 の SAML アサーションまたは他のタイプのセキュリティー・トークンを 発行できます。WSSTrustClient クラスは、OASIS WS-Trust バージョン 1.3 仕様 をサポートし、WS-Trust バージョン 1.2 仕様もサポートしています。 それに加えて、SOAP バージョン 1.1 仕様および SOAP バージョン 1.2 仕様 がこの機能でサポートされています。

下記のサンプル・コードで、Web サービス・クライアントが WSSTrustClient API を使用して SAML bearer トークンを要求する方法を示します。コード・サンプルの前にある説明文では、 SAML トークンという用語 が SAML アサーションという用語と同じ意味で使われています。

WSSTrustClient クラス

Rational® Application Developer などのアセンブリー・ツール・アプリケーションにサンプル・コードをコピーし、構成ステップを完了したらコードの使用を始めることができます。WSSTrustClient クラス を他の SAML API と一緒に使用して、 有用な SAML 関数を作成することができます。詳しくは、SAML API Javadoc を参照してください。

WSSTrustClient クラス は抽象クラスであり、その具象実装には、WS-Trust バージョン 1.3 実装と WS-Trust v1.2 実装の 2 つがあります。 コード・サンプルの 50 行目で、SAMLWSTrustClientExample Web サービス・クライアント・コードは WSSTrustClient.getInstance(ProviderConfig) メソッドを呼び出して、WS-Trust v1.3 実装を取得します。getInstance() メソッドは、 1 つの ProviderConfig オブジェクトを取り、それが SAML トークン発行者に関連する 構成データを指定します。サンプル・コードの 32 行目で、ProviderConfig オブジェクト もインスタンス化されています。このクライアント・コード は、WS-Trust バージョン 1.3 要求メッセージを、ターゲット STS エンドポイントに送信します。 このサンプルでは、エンドポイントは https://MyCompany/Trust/13/UsernameMixed です。このサンプル・コードを実際に使用するには、この STS エンドポイント例を、 使用を予定している特定の STS エンドポイントに置き換えてください。

注: WebSphere Application Server リリース 8 より、Web Services Security (WSS) アプリケーション・プログラミング・インターフェース (API) の com.ibm.websphere.wssecurity.wssapi.token.SAMLToken クラスを使用できます。 混同する恐れがなければ、完全なパッケージ名を使用せずに SAMLToken という用語を使用します。 WSS API を使用すると、外部セキュリティー・トークン・サービス (STS) から SAMLToken 処理を要求したり、 SOAP 要求メッセージで SAMLToken を伝搬したり、SAMLToken で識別される対称鍵または非対称鍵を使用して SOAP メッセージを保護したりできます。

WSS API SAML サポートは、com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory インターフェースおよび com.ibm.websphere.wssecurity.wssapi.trust.WSSTrustClient インターフェースを補完します。 com.ibm.websphere.wssecurity.wssapi.WSSFactory newSecurityToken() メソッドを使用して生成される SAMLToken は、SAMLTokenFactory プログラミング・インターフェースおよび WSSTrustClient プログラミング・インターフェースによって処理できます。 一方、SAMLTokenFactory によって生成される SAMLToken または WSSTrustClient によって返される SAMLToken は、WSS API で使用できます。 アプリケーションでどの API を使用するか決定することは、特定のニーズによって異なります。 WSS API SAML サポートは、Web サービス・クライアント・アプリケーションに関する限り、SAMLTokenFactory インターフェースおよび WSSTrustClient インターフェースと同等の機能を提供するという点では、自己完結的です。SAMLTokenFactory インターフェースには、SAMLToken を検証し、認証された SAMLToken を表す JAAS サブジェクトを作成する追加機能があります。この検証は、 Web サービス・プロバイダー側で役に立ちます。SAMLToken を消費するようにアプリケーションを開発する場合、 SAMLTokenFactory プログラミング・インターフェースがより適しています。

例: WSSTrustClient クラスを使用する Web サービス・クライアント・コード

1.
	package sample;
2.  
3. import com.ibm.websphere.wssecurity.wssapi.WSSException;
4.    import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
5.  import com.ibm.websphere.wssecurity.wssapi.trust.WSSTrustClient;
6.  import com.ibm.websphere.wssecurity.wssapi.token.SAMLToken;
7.  import com.ibm.websphere.wssecurity.wssapi.XMLStructure;
8. 
9. 
10. import com.ibm.wsspi.wssecurity.core.token.config.RequesterConfiguration;
11. import com.ibm.wsspi.wssecurity.core.token.config.WSSConstants.Namespace;
12. import com.ibm.wsspi.wssecurity.core.token.config.WSSConstants.TokenType;
13.
import com.ibm.wsspi.wssecurity.core.token.config.WSSConstants.WST13;
14.  
import com.ibm.wsspi.wssecurity.trust.config.ProviderConfig;
15. import com.ibm.wsspi.wssecurity.trust.config.RequesterConfig;
16. import com.ibm.wsspi.wssecurity.wssapi.OMStructure;
17. 18. import org.apache.axiom.om.OMElement;
19.
import org.apache.axis2.util.XMLPrettyPrinter;
20. 21.
import java.util.List;
22.
import java.io.ByteArrayOutputStream;
23. import java.io.InputStream;
24. import java.io.BufferedReader;
25.
import java.io.InputStreamReader;
26. import java.io.IOException;
27. 28.
public class WSSTrustClientExample {
29.  
30.  
public static void main(String[] args) {
31.
try {
32.
         ProviderConfig providerConfig = WSSTrustClient.newProviderConfig(Namespace.WST13, https://MyCompany.com/Trust/13/UsernameMixed );
33. 34.
         showProviderConfigDefaultValue(providerConfig);
35. 36.          providerConfig.setPolicySetName("Username WSHTTPS default");
37.          providerConfig.setBindingName("SamlTCSample");
38.          providerConfig.setBindingScope("domain");
39.
40.
41.
         RequesterConfig requesterConfig = WSSTrustClient.newRequesterConfig(Namespace.WST13);
42. 43.
         showRequestConfigDefaultValue(requesterConfig);
44.
45.          requesterConfig.put(RequesterConfiguration.RSTT.APPLIESTO_ADDRESS, "https://user.MyCompany:9443/WSSampleSei/EchoService12");
46.          requesterConfig.put(RequesterConfiguration.RSTT.TOKENTYPE, TokenType.SAML11);
47.          requesterConfig.put(RequesterConfiguration.RSTT.KEYTYPE, WST13.KEYTYPE_BEARER);
48.  
         requesterConfig.setSOAPNamespace(Namespace.SOAP12);
49.
50.
         WSSTrustClient client = WSSTrustClient.getInstance(providerConfig);
51.
         List<SecurityToken> securityTokens = client.issue(providerConfig, requesterConfig);
52.
53.
         // Process SAML token
54.
         if (securityTokens != null && !securityTokens.isEmpty()) {
55.
           System.out.println("Number of tokens returned = " + securityTokens.size());
56.            SecurityToken token = securityTokens.get(0);
57.            if (token instanceof SAMLToken) {            
58.
             showSAMLToken((SAMLToken)token);
59.
} else {
60.  
             System.out.println("Returned token is not an SAMLToken");
61.  
}
62.
} else {
63.
           System.out.println("No securityToken obtained.");
64.
}
65.
66.
     } catch (SoapSecurityException ex) {
67.
       System.out.println("Caught exception: " + ex.getMessage());
68.
ex.printStackTrace();
69.
}
70.
}
71.  
72.  
private static void showProviderConfigDefaultValue(ProviderConfig providerConfig) {
73.      System.out.println("providerConfig.getApplicationName() = " + providerConfig.getApplicationName());
74.      System.out.println("providerConfig.getBindingName() = " + providerConfig.getBindingName());
75.      System.out.println("ProviderConfig.getBindingScope() = " + providerConfig.getBindingScope());
76.
     System.out.println("providerConfig.getIssuerURI() = " + providerConfig.getIssuerURI());
77.
78.
     System.out.println("providerConfig.getPolicySetName() = " + providerConfig.getPolicySetName());
79.      System.out.println("ProviderConfig.getPortName() = " + providerConfig.getPortName());
80.      System.out.println("providerConfig.getProvider() = " + providerConfig.getProvider());
81.
     System.out.println("ProviderConfig.getServiceName() = " + providerConfig.getServiceName());
82.      System.out.println("providerConfig.getWSTrustNamespace() = " + providerConfig.getWSTrustNamespace());
83.  
     System.out.println("ProviderConfig.toString() = " + providerConfig.toString());
84.  
}
85.
86.
private static void showRequestConfigDefaultValue(RequesterConfig requesterConfig) {
87.      System.out.println("requesterConfig.getRSTTProperties() = " + requesterConfig.getRSTTProperties());
88.
     System.out.println("requesterConfig.getSecondaryParameters() = " + requesterConfig.getSecondaryParameters());
89.
     System.out.println("requesterConfig.getSOAPNamespace() = " + requesterConfig.getSOAPNamespace());
90.
     System.out.println("requesterConfig.getWSAddressingNamespace() = " + requesterConfig.getWSAddressingNamespace());
91.
92.  
     System.out.println("requesterConfig.getMessageID() = " + requesterConfig.getMessageID());
93.
     System.out.println("requesterConfig.toString() = " + requesterConfig.toString());
94.    }
95. 96.    private static void showSAMLToken(SAMLToken samlToken){
97.      System.out.println("samlToken.getAssertionQName() = " + samlToken.getAssertionQName());
98.      System.out.println("samlToken.getAudienceRestriction() = " + samlToken.getAudienceRestriction());
99.      System.out.println("samlToken.getAuthenticationMethod() = " + samlToken.getAuthenticationMethod());
100.     System.out.println("samlToken.getConfirmationMethod() = " + samlToken.getConfirmationMethod());
101.     System.out.println("samlToken.getId() = " + samlToken.getId());
102.     System.out.println("samlToken.getKeyIdentifier() = " + samlToken.getKeyIdentifier());
103.     System.out.println("samlToken.getKeyIdentifierEncodingType() = " + samlToken.getKeyIdentifierEncodingType());
104.     System.out.println("samlToken.getKeyIdentifierValueType() = " + samlToken.getKeyIdentifierValueType());
105.     System.out.println("samlToken.getKeyName() = " + samlToken.getKeyName());
106.     System.out.println("samlToken.getPrincipal() = " + samlToken.getPrincipal());
107.     System.out.println("samlToken.getProperties() = " + samlToken.getProperties());
108.     System.out.println("samlToken.getReferenceURI() = " + samlToken.getReferenceURI());
109.     System.out.println("samlToken.getSAMLAttributes() = " + samlToken.getSAMLAttributes());
110.     System.out.println("samlToken.getSamlCreated() = " + samlToken.getSamlCreated());
111.     System.out.println("samlToken.getSamlExpires() = " + samlToken.getSamlExpires());
112.     System.out.println("samlToken.getSamlID() = " + samlToken.getSamlID());
113.     System.out.println("samlToken.getSAMLIssuerName() = " + samlToken.getSAMLIssuerName());
114.     System.out.println("samlToken.getSAMLNameID() = " + samlToken.getSAMLNameID());
115.     System.out.println("samlToken.getStringAttributes() = " + samlToken.getStringAttributes());
116.     System.out.println("samlToken.getSubjectDNS() = " + samlToken.getSubjectDNS());
117.     System.out.println("samlToken.getSubjectIPAddress() = " + samlToken.getSubjectIPAddress());
118.     System.out.println("samlToken.getThumbprint() = " + samlToken.getThumbprint());
119.     System.out.println("samlToken.getThumbprintEncodingType() = " + samlToken.getThumbprintEncodingType());
120.     System.out.println("samlToken.getThumbprintValueType() = " + samlToken.getThumbprintValueType());
121.     System.out.println("samlToken.getTokenQname() = " + samlToken.getTokenQname());
122.     System.out.println("samlToken.getValueType() = " + samlToken.getValueType());    
123. 124.    XMLStructure samlXmlStructure = samlToken.getXML();
125.     if (samlXmlStructure != null && samlXmlStructure instanceof OMStructure) {
126.     OMStructure samlOMStructure = (OMStructure) samlXmlStructure;
127.     System.out.println("((OMStructure)samlToken.getXML()).getNode()formatted = " + formatXML(samlOMStructure.getNode()));
128.    }
129. 130.    try {
131.      InputStream is = samlToken.getXMLInputStream();
132.      if (is != null) {
133. try {
134.          BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
135.          StringBuilder sb = new StringBuilder();        
136.          String line = null;           
137.          while ((line = reader.readLine()) != null) {               
138.            sb.append(line + "¥n");            
139. } 
140.          System.out.println(sb.toString()); 
141. } catch (Exception ex) {
142.          System.out.println("Caught exception reading from InputStream: " + ex.getMessage());
143. ex.printStackTrace();
144. } finally {
145. try {
146.            is.close();            
147. } catch (IOException e) {
148. e.printStackTrace();                                            
149. }  
150. } 
151. }
152. } catch (WSSException wex) {
153.      System.out.println("Caught exception getXMLInputStream(): " + wex.getMessage());
154.      wex.printStackTrace();
155. }
156. }  
157. 158. private static String formatXML(OMElement omInput) {
159. ByteArrayOutputStream out = new ByteArrayOutputStream ();
160. String output = "";
161. 162. try {
163.          XMLPrettyPrinter.prettify(omInput, out);
164.          output = out.toString();
165. } catch (Throwable e) {
166. try {
167.            output = omInput.toString();
168.        } catch (Throwable e2) {
169.                System.out.println("Caught exception: " + e2.getMessage());
170.        e2.printStackTrace();
171. }
172. }
173. return output;
174.  }
175. 176. }

WSSTrustClient クラスでのポリシー・セットおよびバインディングのサポート

WS-Trust クライアント機能 は、アプリケーション固有バインディングと汎用バインディングの両方を、 トラスト・クライアント・ポリシー・セットおよびバインディング文書で使用できるよう サポートしています。さらに、アプリケーションがアプリケーション・サーバー環境で実行している場合、 汎用バインディングおよびデフォルト・バインディングがサポート されます。シン・クライアント環境では、汎用バインディングはサポートされますが、 デフォルト・バインディングはサポートされません。

WS-Trust Client API のポリシー・セットおよびバインディングの管理は、Web サービス・クライアントのポリシー・セットおよびバインディングの管理に似ています。ただし、WS-Trust クライアントに固有の 相違点が存在します。相違点の 1 つは、WS-Trust クライアントが ポリシー・セット関連付けを使用しないことです。その代わりに、サンプル・コードの 36 行目と 37 行目に示されているように、 ポリシー・セット名およびバインディング名が ProviderConfig オブジェクト に指定されます。

WS-Trust クライアントがバインディングを探すときにクライアントが検索範囲を管理する方法は、Web サービス・クライアントと異なります。トラスト・クライアント・バインディングに対して wstrustClientBindingScope プロパティー を指定しない場合、まず、指定したバインディング名を持つアプリケーション固有バインディングが アプリケーション内でシステムによって検索されます。バインディングが検出されたら、そのバインディングがトラスト・クライアント要求 に使用されます。アプリケーション固有バインディングが見つからない場合、 システムは、使用可能な汎用バインディングから指定された名前のバインディングを 探します。汎用バインディングが検出されたら、そのバインディングがトラスト・クライアント要求 に使用されます。指定の名前を持つバインディングが見つからない場合、 サーバー環境ではデフォルト・バインディングが使用されます。 デフォルト・バインディングは、サーバー環境でのみ使用されます。バインディング有効範囲が 指定されている場合、その有効範囲のみがバインディング検索に使用されます。

サンプル・コード の 38 行目にある providerConfig.setBindingScope("domain") は、 この例が汎用バインディングを使用することを示しています。バインディング有効範囲 を application に設定して、 サンプル・コードがアプリケーション固有バインディングを使用することを指示することもできます。この例 では、SamlTCSample という名前の汎用バインディングが使用されています。アプリケーション・サーバー環境 およびシン・クライアント環境では、アプリケーション固有バインディングと汎用バインディングの 両方がサポートされます。アプリケーションがアプリケーション・サーバー上にインストールされている 場合の SamlTCSample バインディングの構成について詳しくは、 『STS との通信のためのポリシー・セットおよびバインディングの構成』を参照 してください。

サンプル・コードの 34 行目の showProviderConfigDefaultValue(providerConfig) は、 デフォルト設定を示しています。サンプル・コードには、providerConfig の内容を印刷出力する ユーティリティー・メソッドが含まれています。

サンプル・コードの 51 行目の List<SecurityToken> securityTokens = client.issue(providerConfig, requesterConfig) は、 WS-Trust 発行要求を送信します。この行の 2 番目のパラメーターでは RequesterConfig オブジェクトが指定されていて、 このパラメーターが発行要求の内容を決定します。41 行目のコード RequesterConfig requesterConfig = WSSTrustClient.newRequesterConfig(Namespace.WST13) は、WS-Trust バージョン 1.3 名前空間を使用してトラスト要求を構成するのに 使用される RequesterConfig オブジェクトをインスタンス化しています。43 行目に は、ユーティリティー関数 showRequestConfigDefaultValue(requesterConfig) があります。この関数 は、RequesterConfig オブジェクトに対するデフォルト設定を表示します。45 行目から 48 行目までの コードは、バージョン 1.1 SAML bearer トークンを要求するために RequesterConfig を 初期化します。このトークンは、SOAP 1.2 名前空間を使用したサービス・エンドポイントへのアクセスに 使用されます。この例では、サービス・エンドポイントは https://user.MyCompany.com:9443/WSSampleSei/EchoService12 です。

JVM 引数のサポート

サンプル・コードを 実行する前に、いくつかの Java™ Virtual Machine (JVM) 引数をセットアップする必要があります。サンプル・コードは、Username WSHTTPS default ポリシー・セット を実装していて、これには次の 2 つの要件があります。1) Username トークン が STS に送信されること、および、2) メッセージは Secure Sockets Layer (SSL) を使用して保護されることです。これらの要件を満足する環境をセットアップする ため、まず最初に、ssl.client.props ファイルを構成して、トラストストア を定義します。詳しい手順説明については、『管理対象外 Web サービス JAX-WS クライアントの実行』を参照してください。

SSL メッセージ保護に関する 2 番目の要件を満たすため、 STS SSL X.509 証明書のコピーを取得し、それをトラストストアに 入れます。これを行うには、 『SSL での retrieveSigners コマンドを使用したサーバー間トラストの有効化』トピックに記述されている手順に従って ください。あるいは、profile_home/properties/ssl.client.props ファイル 内の com.ibm.ssl.enableSignerExchangePrompt プロパティーが true に 設定されている場合、最初のトラスト要求を STS に送信するときに STS 証明書を 受け入れることができます。このオプションについて詳しくは、 『クライアントでの署名者自動交換プロンプトの変更』を参照してください。

さらに、 クライアント JAAS 構成ファイルを指定して、 クライアント・ランタイム環境が Username token LoginModule JAAS ログイン構成を見つけることができるようにする必要があります。このパラメーターはコード -Djava.security.auth.login.config="%WAS_HOME%¥properties¥wsjaas_client.conf を使用して指定します。 また、クラスパスにシン・クライアント jar、例えば com.ibm.jaxws.thinclient_9.0.jar を含める必要もあります。詳しくは、『管理対象外 Web サービス JAX-WS クライアント・アプリケーションの実行』を参照してください。

サンプル・コードの実行

サンプル・コードを実行するための前提条件は、RequesterConfiguration.RSTT.APPLIESTO_ADDRESS プロパティーで定義されているように、指定された Web サービスの SAML 1.1 bearer トークンを発行するための外部 STS エンドポイントをセットアップすることです。

サンプル・コードの 実行によって、例に示されているように、WS-Trust 発行要求メッセージが生成 されます。
177. <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
178. <soapenv:Header>
179.          <wsa:To xmlns:wsa="http://www.w3.org/2005/08/addressing">https://user.MyCompany.com/Trust/13/UsernameMixed</wsa:To>
180.          <wsa:MessageID xmlns:wsa="http://www.w3.org/2005/08/addressing">urn:uuid:4951B6775950CAC92A1252458259166</wsa:MessageID>
181.          <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue</wsa:Action>
182. </soapenv:Header>
183. <soapenv:Body>
184.          <wst:RequestSecurityToken xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
185.              <wst:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1</wst:TokenType>
186.              <wst:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</wst:RequestType>
187.              <wst:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</wst:KeyType>
188. <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
189.                  <wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing">
190.                      <wsa:Address>https://user.MyCompany.com:9443/WSSampleSei/EchoService12</wsa:Address>
191.                  </wsa:EndpointReference>
192. </wsp:AppliesTo>
193.          </wst:RequestSecurityToken>
194. </soapenv:Body>
195.  </soapenv:Envelope>
WS-Trust 要求メッセージ を表示するには、クライアント・サイドのトレースを使用可能にする必要があります。次の JVM プロパティーを設定します。
  • -DtraceSettingsFile=MyTraceSettings.properties
  • -Djava.util.logging.manager=com.ibm.ws.bootstrap.WsLogManager
  • -Djava.util.logging.configureByServer=true
これらのプロパティーについて詳しくは、 『クライアントおよびスタンドアロン・アプリケーションでのトレースの使用可能化』を参照してください。これらの JVM プロパティーを 設定することに加えて、MyTraceSettings.properties ファイル内の トレース設定 com.ibm.ws.wssecurity.*=all=enabled も指定する必要があります。トレース・ログ・ファイル 内の Trust Client outgoing request: を探してください。

SAML トークンの戻り

サンプル・コードの 51 行目 の List<SecurityToken> securityTokens = client.issue(providerConfig, requesterConfig) は、WS-Trust 発行要求が正常に処理された場合に SAML トークンを 戻します。54 行目から 64 行目の コードが、戻された SAML トークンを処理します。58 行目に あるユーティリティー関数 showSAMLToken((SAMLToken)token) は、 受け取った SAML トークンの内容を表示します。showSAMLToken() ルーチン は、SAML トークンを XML 文書として表示します。この XML 文書の例が、サンプル・コードの 196 行目から 233 行目にあります。
196.  <?xml version="1.0" encoding="UTF-8"?>
197.  <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" MajorVersion="1" MinorVersion="1"
198. AssertionID="_f7f65d28-fbb1-4e10-8ddf-f4b6ed0c8277" Issuer="http://MyCompany.com/Trust" 
199. IssueInstant="2009-09-09T01:04:41.144Z">
200.      <saml:Conditions NotBefore="2009-09-09T01:04:41.141Z" NotOnOrAfter="2009-09-09T11:04:41.141Z">
201. <saml:AudienceRestrictionCondition>
202.              <saml:Audience>https://user.MyCompany.com:9443/WSSampleSei/EchoService12</saml:Audience>
203. </saml:AudienceRestrictionCondition>
204. </saml:Conditions>
205. <saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"
206.       AuthenticationInstant="2009-09-09T01:04:41.131Z">
207. <saml:Subject>
208. <saml:SubjectConfirmation>
209. <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod>
210. </saml:SubjectConfirmation>
211. </saml:Subject>
212. </saml:AuthenticationStatement>
213. <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
214. <ds:SignedInfo>
215. <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
216. <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
217.              <ds:Reference URI="#_f7f65d28-fbb1-4e10-8ddf-f4b6ed0c8277">
218. <ds:Transforms>
219. <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
220. <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
221. </ds:Transforms>
222. <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
223.                  <ds:DigestValue>AQ6e7YQqKgcg/B/ebBj8/DF+uWg=</ds:DigestValue>
224. </ds:Reference>
225. </ds:SignedInfo>
226.          <ds:SignatureValue>SuccIOniR . . . . yjTh9iQs=</ds:SignatureValue>
227. <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
228. <X509Data>
229.                  <X509Certificate>MIIB3zCCAUi . . . . itzymqg3</X509Certificate>
230.  </X509Data>
231. </KeyInfo>
232. </ds:Signature>
233.  </saml:Assertion>

トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_samltrustclientapi
ファイル名:rwbs_samltrustclientapi.html