方法 : 同じ型の複数のセキュリティ トークンを使用する

  • .NET Framework 3.0 では、クライアント メッセージには任意の型のトークンを 1 つしか含めることができませんでしたが、現在は、同じ型の複数のトークンをクライアント メッセージに含めることができるようになりました。このトピックでは、同じ型の複数のトークンをクライアント メッセージに含める方法について説明します。

  • この方法でサービスを構成することはできません。サービスに含めることができるサポート トークンは 1 つだけです。

同じ型の複数のセキュリティ トークンを使用するには

  1. 設定する空のバインド要素コレクションを作成します。

    // Create an empty BindingElementCollection to populate, 
    // then create a custom binding from it.
    BindingElementCollection bec = new BindingElementCollection();
    
  2. CreateMutualCertificateBindingElement を呼び出して SecurityBindingElement を作成します。

    SecurityBindingElement sbe = SecurityBindingElement.CreateMutualCertificateBindingElement();
    
  3. SupportingTokenParameters のコレクションを作成します。

    SupportingTokenParameters supportParams = new SupportingTokenParameters();
    
  4. SAML トークンをコレクションに追加します。

    // Two supporting SAML tokens are being added.
    supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress1, issuerBinding1));
    supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress2, issuerBinding2));
    
  5. コレクションを SecurityBindingElement に追加します。

    ((SymmetricSecurityBindingElement)sbe).OperationSupportingTokenParameters.Add("*", supportParams);
    
  6. バインド要素をバインド要素コレクションに追加します。

    bec.Add(sbe);
    bec.Add(new TextMessageEncodingBindingElement());
    bec.Add(new HttpTransportBindingElement());
    
  7. 作成した新しいカスタム バインディングをバインド要素コレクションから返します。

    // Create a CustomBinding and return it; otherwise, return null.
    return new CustomBinding(bec);
    

上記の手順で説明したメソッド全体を次に示します。

// This method creates a CustomBinding that includes two tokens of a given type.
public static Binding CreateCustomBinding(EndpointAddress issuerEndpointAddress1, Binding issuerBinding1, EndpointAddress issuerEndpointAddress2, Binding issuerBinding2)
{
    // Create an empty BindingElementCollection to populate, 
    // then create a custom binding from it.
    BindingElementCollection bec = new BindingElementCollection();

    SecurityBindingElement sbe = SecurityBindingElement.CreateMutualCertificateBindingElement();

    SupportingTokenParameters supportParams = new SupportingTokenParameters();
    
    // Two supporting SAML tokens are being added.
    supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress1, issuerBinding1));
    supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress2, issuerBinding2));
    
    ((SymmetricSecurityBindingElement)sbe).OperationSupportingTokenParameters.Add("*", supportParams);
    
    bec.Add(sbe);
    bec.Add(new TextMessageEncodingBindingElement());
    bec.Add(new HttpTransportBindingElement());

    // Create a CustomBinding and return it; otherwise, return null.
    return new CustomBinding(bec);
}

参照

概念

セキュリティ アーキテクチャ