Как использовать несколько маркеров безопасности одного типа
В .NET Framework 3.0 клиентское сообщение содержало только один маркер любого заданного типа. Теперь клиентские сообщения могут содержать несколько маркеров одного типа. В этом разделе описывается, как включать в сообщение клиента несколько маркеров одного типа.
Обратите внимание, что настроить таким образом службу невозможно: служба может содержать только один вспомогательный маркер.
Использование нескольких маркеров безопасности одного типа
Создайте пустую коллекцию элементов привязки для заполнения.
// Create an empty BindingElementCollection to populate, // then create a custom binding from it. BindingElementCollection bec = new BindingElementCollection();
Создайте элемент привязки SecurityBindingElement, вызвав метод CreateMutualCertificateBindingElement.
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);
}