API を使用した SAML トークンの伝搬

SAML 伝搬機能は、複数のサーバーにまたがる対話を行うアプリケーション で有用です。伝搬機能は、発生元サーバーからダウンストリームの他のサーバーへ トークン情報を伝えます。

SAML トークンの伝搬は、管理コマンドを使用して行うか、 または、SAML アプリケーション・プログラミング・インターフェース (API) を 使用してプログラムで行うことができます。管理コマンドによる伝搬は、 『SAML トークンの伝搬』および『SAML トークン伝搬メソッド』トピックに説明されています。

プログラムでの SAML トークンの伝搬は、明示的なプログラミングと Web Services Security ランタイム環境の使用を組み合わせることによって実現します。例えば、SAML トークンを org.apache.axis2.jaxws.BindingProvider オブジェクト から抽出できます。このトークンは、その後、アウトバウンド・コールに使用されます。この例では、 WebSphere® セキュリティーは必要ない ため、プログラムでの SAML トークン伝搬は、 アプリケーション・レベルでの SAML セキュリティーの利用を可能にします。さらに、 SAML トークンは、任意のプロトコルを使用するダウンストリームと対話できます。

以下の サンプル・コードは、最初の要求が完了した後にクライアント・サイドで SAML トークンを 抽出するのに使用できます。

Dispatch オブジェクトを 作成し、要求を呼び出します。
javax.xml.ws.Dispatch dispatch = ...;
dispatch.invoke();
応答コンテキストを取得し、 SAML トークンを抽出します。
Map<String, Object> responseContext = dispatch.getResponseContext();
 				SAMLToken samlToken = (SAMLToken ) responseContext.get(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
    SAMLTOKEN_OUT_MESSAGECONTEXT);

以下のサンプル・コードは、後続の Web サービス要求に SAML トークンを再使用する方法を示します。

Web サービス・クライアント・プログラムは、サービスを呼び出すためのディスパッチ・インスタンスを作成します。
javax.xml.ws.Dispatch dispatch = ...;
次に、Web サービス・クライアントは、次のコードを使用して、Web Services Security ハンドラーに SAML トークンを渡します。
Map<String, Object> requestContext = dispatch.getRequestContext();
     requestContext.put(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
     SAMLTOKEN_IN_MESSAGECONTEXT, samlToken);           

Web サービス・プロバイダー (受信側) は、次のコードを使用して、着信 Web サービス要求から SAML トークンを抽出できます。

requestContext から SAML トークンを抽出します。
Subject subject = (Subject) context.get(com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_TOKEN_WSSSUBJECT);
	SAMLToken samlToken = null;
try {
  		samlToken = (SAMLToken) AccessController.doPrivileged(
    				new java.security.PrivilegedExceptionAction() {
      public Object run() throws java.lang.Exception {
        						final java.util.Iterator authIterator = 
           subject.getPrivateCredentials(SAMLToken.class).iterator();

        						if ( authIterator.hasNext() ) {
          							final SAMLToken token = (SAMLToken) 
          authIterator.next();
          							return token;
        }
        return null;
      }
    });
} catch (Exception ex) {
  // Error handling
}
  
SAML 属性を抽出します。
List<SAMLAttribute> allAttributes;
allAttributes = ((SAMLToken) samlToken).getSAMLAttributes();

Web サービス・クライアント・ランタイム環境は、SAML トークンをキャッシュに入れることができます。アプリケーション内の以降のクライアント要求で、ターゲットで使用するために、セキュリティー・ランタイム環境 はキャッシュから SAML トークンを取り出します。


トピックのタイプを示すアイコン 概念トピック



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