SAML トークンの伝搬

さまざまな SAML トークン伝搬方式を使用して、アウトバウンド Web サービス・メッセージ内に SAML トークンを組み込むことができます。

このタスクについて

Web サービス・クライアントは、以下の 2 つのタイプのトークンをアウトバウンド Web サービス・メッセージに組み込むことができます。
  • インバウンド Web サービス・メッセージからクライアントが受信した、元の SAML トークン。
  • 自己発行した新規 SAML トークン。
新規 SAML トークンの生成では、元の SAML トークンからの属性を 使用するか、または、RunAs サブジェクト内の WSPrincipal ユーザー名からの属性を 使用することができます。どの SAML トークンが伝搬されるのかは、Web サービス・ポリシー構成によって決まります。ポリシー構成はオーバーライドすることができ、そうするには、伝搬したい SAML トークンを Axis2 RequestContext オブジェクト にプログラマチックに挿入します。

4 種類の伝搬方式 が使用可能です。次の表に、伝搬方式および関連するバインディング・オプションの 要約を示します。

表 1. 伝搬方式および関連するバインディング・オプション. 伝搬を使用して、Web サービス・メッセージに SAML トークンを組み込みます。
SAML トークン伝搬方式 バインディング・オプション 実装の詳細
元の SAML トークンを伝搬する。 tokenRequest バインディング・オプションは 値 propagation に設定されます。 元の SAML トークンが、トークンを受け取ったサーバーから 他のサーバーへ WS-Security を使用して送信されます。
ユーザー・セキュリティー名、固有のセキュリティー名、グループ ID、およびセキュリティー・レルム名を伝搬する。 tokenRequest バインディング・オプションは 値 issueByWSCredential に設定されます。 デフォルトのシステム実装に優先します。

自己発行 SAML トークンには、ユーザー・セキュリティー・コンテキストで WSCredential オブジェクトによって指定されたユーザー・セキュリティー名、ユーザー固有のセキュリティー名、グループ ID、およびセキュリティー・レルム名が含まれます。

SAML トークン ID および属性を伝搬する。 バインディング・オプションは設定されません。 デフォルトのシステム実装です。

サーバーは、 元の SAML 属性、 認証方式、および NameIdentifier または SAML NameID を含んでいる 新規 SAML トークンを自己生成し、生成したその新規 SAML トークンを WS-Security を使用してダウンストリーム・サーバーに送信します。 新規 SAML トークンの発行者名、発行者署名証明書、および存続期間 は、SAML プロバイダー構成プロパティーによって決まります。

WSPrincipal を伝搬する。 tokenRequest バインディング・オプションは 値 issueByWSPrincipal に設定されます。
移行ユーザーの方へ 移行ユーザーの方へ: バージョン 8 からは、issueByWSPrincipal 値または issueByWSCredential 値のどちらを指定しても同じ結果になります。issueByWSPrincipal 値をまだ使用していない場合は、issueByWSCredential 値を使用することをお勧めします。すでに issueByWSPrincipal 値を使用している場合は、最終的にはその値を issueByWSCredential 値に置き換えることをお勧めします。trns
デフォルトのシステム実装に優先します。

自己発行 された SAML トークンでは、RunAs サブジェクト内に WSPrincipal 情報が 含まれます。この情報は NameIdentity または NameID として保管され、元の SAML トークンがサブジェクト中に存在する場合でも、元のトークンからは 何もコピーされません。

既存の SAML トークンをプログラマチックに伝搬する。 伝搬したい SAML トークンを、 プロパティー com.ibm.wsspi.wssecurity.core.token.config.WSSConstants.SAMLTOKEN_IN_MESSAGECONTEXT を使用して、RequestContext に挿入します。 他の既存のすべてのバインディング・オプションに優先します。

手順

  1. 元の SAML トークンを伝搬するには、以下のステップに示すように、bindings.xml ファイル内で tokenRequest バインディング・オプションを値 propagation に設定します。 この方式では、元の SAML トークン が他のサーバーへ WS-Security を使用して送信されます。伝搬が成功する ためには、有効な SAML トークン が RunAs サブジェクト内に存在している必要があります。サーバーは、現行のセキュリティー・コンテキストの RunAs サブジェクトから SAML トークン を取り出し、以下の条件を検証します。これらの条件のいずれかが満たされない場合、WS-Security ランタイム環境 は SAML トークンを伝搬せず、伝搬要求は失敗します。
    • SAML トークンの有効期限が切れておらず、有効期限 は notOnOrAfter 値の時間枠内に収まっている。
    • SAML トークン内の ConfirmationMethod 設定 が、トークン生成プログラム構成に定義された confirmationMethod バインディング・オプション と同じである。
    • SAML トークン内のトークン ValueType が、 トークン生成プログラム構成に定義された ValueType と一致する。

    tokenRequest バインディング・オプションに 正しい値を設定するには、以下のステップを実行します。この手順では、JaxWSServicesSamples という名前の Web サービス・クライアント・アプリケーションがデプロイされていて、Saml Bearer Client sample バインディングが関連付けされていることを想定しています。

    1. 「アプリケーション」>「アプリケーション・タイプ」> 「WebSphere エンタープライズ・アプリケーション」>「JaxWSServicesSamples」> 「サービス・クライアントのポリシー・セットおよびバインディング」>「Saml Bearer Client sample」 >「WS-Security」>「認証および保護」とクリックします。
    2. 認証トークンの表で「gen_saml11token」を クリックします。
    3. コールバック・ハンドラー」をクリックします。
    4. カスタム・プロパティー tokenRequest を 追加し、プロパティー値を propagation に設定します。
  2. 自己発行する SAML トークンを使用して SAML トークン ID および属性を伝搬 するには、bindings.xml ファイル内の outbound tokenGenerator を 変更します。 この方式は、元の SAML 属性、 NameIdentifier または NameID、および認証方式を、元の SAML トークン から他のサーバーへ WS-Security を使用して送信します。サブジェクト内に SAML トークン がない場合、サーバーは、NameIdentifier または NameID として保管された WSPrincipal を 使用して、自己発行 SAML トークンを作成します。 この伝搬方式は、デフォルトのシステム実装です。この方式 では、バインディング・オプションは設定されません。
    この伝搬方式を使用する場合、 bindings.xml ファイルには以下の制約が適用されます。
    • bindings.xml ファイル内に tokenRequest バインディング・オプションを設定しないでください。
    • bindings.xml ファイル内に stsURI バインディング・オプションを 設定しないか、または、このオプションを値 www.websphere.ibm.com/SAML/Issuer/Self に設定してください。
  3. WSPrincipal を伝搬するには、以下のステップに示すように、bindings.xml ファイルを変更します。 bindings.xml ファイル内で tokenRequest バインディング・オプション を値 issueByPrincipal に設定 します。この方式を使用すると、自己発行される SAML トークンは、 サブジェクト内に SAML トークンがある場合でも、常に WSPrincipal に基づきます。新規 SAML トークンは、WSPrincipal ユーザー名を NameId または NameIdentifier として含みます。このトークンは、 WSPrincipal オブジェクトまたは WSCredential オブジェクト内に他の属性を含みません。
    この伝搬方式を使用する場合、 以下の制約が bindings.xml ファイルに適用されます。
    • bindings.xml ファイル内に stsURI バインディング・オプションを設定しないか、 または、このオプションを値 www.websphere.ibm.com/SAML/Issuer/Self に設定してください。

    tokenRequest バインディング・オプションに 正しい値を設定するには、以下のステップを実行します。この手順では、JaxWSServicesSamples という名前の Web サービス・クライアント・アプリケーションがデプロイされていて、Saml Bearer Client sample バインディングが関連付けされていることを想定しています。

    1. 「アプリケーション」>「アプリケーション・タイプ」> 「WebSphere エンタープライズ・アプリケーション」>「JaxWSServicesSamples」> 「サービス・クライアントのポリシー・セットおよびバインディング」>「Saml Bearer Client sample」 >「WS-Security」>「認証および保護」とクリックします。
    2. 認証トークンの表で「gen_saml11token」を クリックします。
    3. コールバック・ハンドラー」をクリックします。
    4. カスタム・プロパティー tokenRequest を 追加し、プロパティー値を issueByPrincipal に設定します。
  4. RequestContext に SAMLToken を挿入して、既存の SAML トークンを伝搬するには、以下のステップを実行します。 この方式は、作成した SAML トークンを ダウンストリーム・サーバーに WS-Security を使用して送信する場合に 使用してください。WS-Security ランタイムが RequestContext 内で SAML トークンを検出すると、伝搬が自動的にトリガーされます。事前に 存在するトークンが、他の既存のすべてのバインディング・オプションに優先します。この 伝搬方式を使用するには、以下のステップに示すように、com.ibm.wsspi.wssecurity.core.token.config.WSSConstants.SAMLTOKEN_IN_MESSAGECONTEXT を キーとして指定することによって、RequestContext に既存の SAML トークンを保存します。
    1. 次の例のように、メソッド SAMLToken samlToken = <token type> を使用して SAML トークンを生成します。
      SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
    2. 次の例のように、この SAMLToken を RequestContext に保存します。
      Map requestContext = ((BindingProvider)port).getRequestContext();
         requestContext.put("com.ibm.wsspi.wssecurity.core.token.config.WSSConstants.SAMLTOKEN_IN_MESSAGECONTEXT", samlToken );
    この伝搬オプションは、他の伝搬方式と共存 することができ、他の方式に優先します。RequestContext 内の SAML トークン の有効期限が切れている場合、または、トークンの有効期限が現行時刻にキャッシュ・クッションを加算したもの より小さい場合、WS-Security ランタイム環境 はその SAML トークンを無視し、他の 3 つの伝搬方式 のうち、bindings.xml ファイル内に構成されているいずれかの方式を使用します。他の 3 つの 伝搬方式の使用を回避するには、TokenGenerator 構成内でコールバック・ハンドラーの 下のカスタム・プロパティーに バインディング・オプション failOverToTokenRequest = false を追加します。
  5. com.ibm.websphere.security.cred.WSCredential オブジェクトに含まれているユーザーのグループ・メンバーシップ、固有のセキュリティー名、およびレルム名を伝搬するには、次のステップに示すように bindings.xml ファイルを変更します。 bindings.xml ファイル内で tokenRequest バインディング・オプション を値 issueByWSCredential に設定 します。この方式を使用すると、自己発行される SAML トークンは、 サブジェクト内に SAML トークンがある場合でも、常に WSCredential に基づきます。

    新しい SAML 1.1 トークンには、以下のアサーションが含まれています。

    • NameIdentifier エレメントには WSCredentialSecurityName 値が設定され、NameQualifier エレメントには WSCredential のレルム名が設定されます。SecurityName は、WSCredential.getSecurityName() メソッドを呼び出すことによって取得されます。 レルム名は、WSCredential.getRealmName() メソッドを呼び出すことによって取得されます。
    • すべての属性の AttributeNamespace には値 com.ibm.websphere.security.cred.WSCredential が設定されます。
    • GroupIds 属性には、ユーザーが属するすべてのグループ名が設定されます。グループ名は、WSCredential.getGroupIds() メソッドを呼び出すことによって取得されます。
    • UniqueSecurityName 属性には、WSCredential.getUniqueSecurityName() メソッドを呼び出すことによって取得された固有のセキュリティー名が設定されます。
    • オプションで、コールバック・ハンドラーで includeRealmName=true カスタム・プロパティーを追加することによって、WSCredential からレルム名を表明できます。

    新しい SAML 2.0 トークンには、以下のアサーションが含まれています。

    • NameID エレメントには WSCredentialSecurityName 値が設定され、NameQualifier エレメントには WSCredential のレルム名が設定されます。SecurityName は、WSCredential.getSecurityName() メソッドを呼び出すことによって取得されます。 レルム名は、WSCredential.getRealmName() メソッドを呼び出すことによって取得されます。
    • すべての属性の NameFormat には値 com.ibm.websphere.security.cred.WSCredential が設定されます。
    • GroupIds 属性には、ユーザーが属するすべてのグループ名が設定されます。グループ名は、WSCredential.getGroupIds() メソッドを呼び出すことによって取得されます。
    • UniqueSecurityName 属性には、WSCredential.getUniqueSecurityName() メソッドを呼び出すことによって取得された固有のセキュリティー名が設定されます。
    • オプションで、コールバック・ハンドラーで includeRealmName=true カスタム・プロパティーを追加することによって、WSCredential からレルム名を表明できます。
    この伝搬方式を使用する場合、以下の制約が bindings.xml ファイルに適用されます。
    • bindings.xml ファイル内に stsURI バインディング・オプションを設定しないでください。
    tokenRequest バインディング・オプションに 正しい値を設定するには、以下のステップを実行します。この手順では、 JaxWSServicesSamples という名前の Web サービス・クライアント・アプリケーションがデプロイされていて、Saml Bearer Client sample バインディングが関連付けされていることを想定しています。
    1. 「アプリケーション」>「アプリケーション・タイプ」> 「WebSphere エンタープライズ・アプリケーション」>「JaxWSServicesSamples」> 「サービス・クライアントのポリシー・セットおよびバインディング」>「Saml Bearer Client sample」 >「WS-Security」>「認証および保護」とクリックします。
    2. 認証トークンの表で「gen_saml11token」を クリックします。
    3. コールバック・ハンドラー」をクリックします。
    4. tokenRequest カスタム・プロパティーを 追加し、プロパティー値を issueByWSCredential に設定します。
    次の例では、WSCredential に基づいて自己発行 SAML 1.1 アサーションから取得された NameIdentifier および Attribute ステートメントを示します。
    <saml:AttributeStatement>
        <saml:Subject>
            <saml:NameIdentifier NameQualifier="ldap.acme.com:9080">uid=alice,dc=acme,dc=com</saml:NameIdentifier>
            <saml:SubjectConfirmation>
                <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod>
            </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:Attribute AttributeName="UniqueSecurityName" AttributeNamespace="com.ibm.websphere.security.cred.WSCredential">
            <saml:AttributeValue>uid=alice,dc=acme,dc=com</saml:AttributeValue>
        </saml:Attribute>
        <saml:Attribute AttributeName="GroupIds" AttributeNamespace="com.ibm.websphere.security.cred.WSCredential">
            <saml:AttributeValue>cn=development,dc=acme,dc=com</saml:AttributeValue>
            <saml:AttributeValue>cn=deployment,dc=acme,dc=com</saml:AttributeValue>
            <saml:AttributeValue>cn=test,dc=acme,dc=com</saml:AttributeValue>
        </saml:Attribute>
    </saml:AttributeStatement>
    次の例では、WSCredential に基づいて自己発行 SAML 2.0 アサーションから取得された NameID および Attribute ステートメントを示します。
    <saml2:AttributeStatement>
        <saml2:Attribute Name="UniqueSecurityName"
               NameFormat="com.ibm.websphere.security.cred.WSCredential">
            <saml2:AttributeValue>uid=alice,dc=acme,dc=com</saml2:AttributeValue>
        <saml2:Attribute>
        <saml2:Attribute AttributeName="GroupIds"
               NameFormat="com.ibm.websphere.security.cred.WSCredential">
            <saml2:AttributeValue>cn=development,dc=acme,dc=com</saml2:AttributeValue>
            <saml2:AttributeValue>cn=deployment,dc=acme,dc=com</saml2:AttributeValue>
            <saml2:AttributeValue>cn=test,dc=acme,dc=com</saml2:AttributeValue>
        </saml2:Attribute>
    </saml2:AttributeStatement>
    <saml2:NameID NameQualifier="ldap.acme.com:9060">alice</saml2:NameID>

トピックのタイプを示すアイコン タスク・トピック



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