方法 : 同じ型の複数のセキュリティ トークンを使用する
.NET Framework 3.0 では、クライアント メッセージには任意の型のトークンを 1 つしか含めることができませんでしたが、現在は、同じ型の複数のトークンをクライアント メッセージに含めることができるようになりました。このトピックでは、同じ型の複数のトークンをクライアント メッセージに含める方法について説明します。
この方法でサービスを構成することはできません。サービスに含めることができるサポート トークンは 1 つだけです。
同じ型の複数のセキュリティ トークンを使用するには
設定する空のバインド要素コレクションを作成します。
// Create an empty BindingElementCollection to populate, // then create a custom binding from it. BindingElementCollection bec = new BindingElementCollection();
CreateMutualCertificateBindingElement を呼び出して SecurityBindingElement を作成します。
SecurityBindingElement sbe = SecurityBindingElement.CreateMutualCertificateBindingElement();
SupportingTokenParameters のコレクションを作成します。
SupportingTokenParameters supportParams = new SupportingTokenParameters();
SAML トークンをコレクションに追加します。
// Two supporting SAML tokens are being added. supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress1, issuerBinding1)); supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress2, issuerBinding2));
コレクションを SecurityBindingElement に追加します。
((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);
例
上記の手順で説明したメソッド全体を次に示します。
// 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);
}