Cómo: Utilizar múltiples tokens de seguridad del mismo tipo
En .NET Framework 3.0, un mensaje de cliente solo contenía un token de un tipo dado. Ahora, los mensajes de cliente pueden contener múltiples tokens de un tipo. En este tema se muestra cómo incluir múltiples tokens del mismo tipo en un mensaje de cliente.
Tenga en cuenta que no se puede configurar un servicio de esta manera: un servicio puede contener solo un token auxiliar.
Utilizar múltiples tokens de seguridad del mismo tipo
Cree una colección vacía de elementos de enlace para rellenarla.
// Create an empty BindingElementCollection to populate, // then create a custom binding from it. BindingElementCollection bec = new BindingElementCollection();
Cree SecurityBindingElement llamando a CreateMutualCertificateBindingElement.
SecurityBindingElement sbe = SecurityBindingElement.CreateMutualCertificateBindingElement();
Cree una colección SupportingTokenParameters.
SupportingTokenParameters supportParams = new SupportingTokenParameters();
Agregue tokens SAML a la colección.
// Two supporting SAML tokens are being added. supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress1, issuerBinding1)); supportParams.SignedEndorsing.Add(new IssuedSecurityTokenParameters("samlTokenType", issuerEndpointAddress2, issuerBinding2));
Agregue la colección a SecurityBindingElement.
((SymmetricSecurityBindingElement)sbe).OperationSupportingTokenParameters.Add("*", supportParams);
Agregue elementos de enlace a la colección de elementos de enlace.
bec.Add(sbe); bec.Add(new TextMessageEncodingBindingElement()); bec.Add(new HttpTransportBindingElement());
Devuelva un nuevo enlace personalizado creado a partir de la colección de elementos de enlace.
// Create a CustomBinding and return it; otherwise, return null. return new CustomBinding(bec);
Ejemplo
Lo siguiente es el método completo descrito por el procedimiento anterior.
// 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);
}