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 トークンを取り出します。