Cómo: Crear un WSFederationHttpBinding
En Windows Communication Foundation (WCF), la clase WSFederationHttpBinding proporciona un mecanismo para exponer un servicio federado, (wsFederationHttpBinding element en configuración). Es decir, un servicio que exige a los clientes su autenticación mediante un token de seguridad emitido por un servicio de token de seguridad. Este tema muestra cómo configurar un WSFederationHttpBinding tanto en el código y como en la configuración. Una vez creado el enlace, puede configurar un punto final para que utilice dicho enlace.
A continuación se describen los pasos básicos:
Seleccione un modo de seguridad. WSFederationHttpBinding admite Message, que proporciona seguridad global en el nivel de mensaje, incluso a través de múltiples saltos, y TransportWithMessageCredential, que ofrece el mejor rendimiento para los casos en los que el cliente y el servicio pueden realizar una conexión directa sobre HTTPS.
Nota
WSFederationHttpBinding también admite None como modo de seguridad. Este modo no es seguro y se ofrece sólo para fines de depuración. Si un punto final de servicio se implementa con un WSFederationHttpBinding, con su modo de seguridad establecido en None, el enlace de cliente resultante (generado por ServiceModel Metadata Utility Tool (Svcutil.exe)) es WsHttpBinding con un modo de seguridad de None.
A diferencia de otros enlaces proporcionados por el sistema, no es necesario seleccionar un tipo de credencial de cliente cuando se utiliza WSFederationHttpBinding. Esto se debe a que el tipo de credencial de cliente siempre es un token emitido. WCF adquiere un token de un emisor especificado y se lo ofrece al servicio para autenticar el cliente.
En clientes federados, se establece la propiedad IssuerAddress para la dirección URL del servicio de token de seguridad. Establezca IssuerBinding como el enlace utilizado para comunicar con el servicio de token de seguridad.
Opcional. Establezca la propiedad IssuedTokenType en el Identificador uniforme de recursos (URI) de un tipo de token. En servicios federados, especifique el tipo de token que el servicio espera. En clientes federados, especifique el tipo de token que el cliente solicita al servicio de token de seguridad.
Si no se especifica ningún tipo de token, los clientes generan las solicitudes de tokens de seguridad (RST) de WS-Trust sin un URI del tipo de token, y los servicios asumen que la autenticación del cliente se realiza utilizando, de manera predeterminada, un token de Lenguaje de marcado de aserción de seguridad (SAML) 1.1.
El URI para un token de SAML 1.1 es "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1".Opcional. En servicios federados, establezca la propiedad IssuerMetadataAddress como la dirección URL de los metadatos de un servicio de token de seguridad. Si el servicio está configurado para publicar metadatos, el punto final de los metadatos permite a los clientes del servicio seleccionar un par enlace/punto final adecuado. Para obtener más información acerca de que publique los metadatos, vea Publicación de metadatos.
También pueden establecerse otras propiedades, incluidos el tipo de clave utilizado como clave de prueba en el token emitido, el conjunto de algoritmos utilizado entre el cliente y el servicio, si negociar o especificar explícitamente la credencial del servicio, cualquier demanda concreta que el servicio espera que este contenido en el token emitido, y cualquier elemento XML adicional que deba agregarse a la solicitud que el cliente envía al servicio de token de seguridad.
Nota
La propiedad NegotiateServiceCredential es relevante únicamente cuando SecurityMode se establece como Message. Si SecurityMode se establece como TransportWithMessageCredential, se omite la propiedad NegotiateServiceCredential.
Para configurar un WSFederationHttpBinding en código
Cree una instancia de WSFederationHttpBinding.
Establezca la propiedad Mode como Message o TransportWithMessageCredential, según se requiera. Si se requiere un conjunto de algoritmos distinto de Basic256, establezca la propiedad AlgorithmSuite con un valor tomado de SecurityAlgorithmSuite.
Establezca la propiedad NegotiateServiceCredential según corresponda.
Establezca la propiedad IssuedKeyType como SecurityKeyType SymmetricKey o .AsymmetricKey, según se requiera.
Establezca un valor adecuado para la propiedad IssuedTokenType. Si no se establece ningún valor, WCF toma el valor predeterminado "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1", lo que indica tokens de SAML 1.1.
Obligatorio en el cliente, si no se especifica ningún emisor local; opcional en el servicio. Cree EndpointAddress que contenga la dirección e información de identidad del servicio de token de seguridad, y asigne la instancia EndpointAddress a la propiedad IssuerAddress.
Obligatorio en el cliente si no se especifica ningún emisor local; no se utiliza en el servicio. Cree Binding para SecurityTokenService, y asigne la instancia Binding a la propiedad IssuerBinding.
No se utiliza en el cliente; opcional en el servicio. Cree una instancia EndpointAddress para los metadatos del servicio de token de seguridad, y asígnelo a la propiedad IssuerMetadataAddress.
Opcional en el cliente y el servicio. Cree y agregue una o más instancias ClaimTypeRequirement a la colección devuelta por la propiedad ClaimTypeRequirements.
Opcional en el cliente y el servicio. Cree y agregue una o más instancias XmlElement a la colección devuelta por la propiedad TokenRequestParameters.
Para crear un extremo federado en la configuración
Cree wsFederationHttpBinding element como elemento secundario del elemento <bindings> en el archivo de configuración de la aplicación.
Cree binding como elemento secundario de wsFederationHttpBinding element, y establezca el atributo name con un valor adecuado.
Cree un elemento <security> como elemento secundario del elemento binding.
Establezca el atributo mode del elemento <security> con un valor de Message o TransportWithMessageCredential, como se requiera.
Cree un elemento <message> como elemento secundario del elemento <security>.
Opcional. Establezca el atributo algorithmSuite del elemento <message> con un valor adecuado. El valor predeterminado es Basic256.
Opcional. Si se requiere una clave de prueba asimétrica, establezca el atributo issuedKeyType del elemento <message> como AsymmetricKey. El valor predeterminado es SymmetricKey.
Opcional. Establezca el atributo issuedTokenType en el elemento <message>.
Obligatorio en el cliente si no se especifica ningún emisor local; opcional en el servicio. Cree <issuer> como elemento secundario del elemento <message>.
Establezca el atributo address como el elemento <issuer>, y especifique la dirección en la que el servicio de token de seguridad acepta las solicitudes de token.
Opcional. Agregue un elemento secundario <identity> y especifique la identidad del servicio de token de seguridad
Para obtener más información, consulte Identidad del servicio y autenticación.
Obligatorio en el cliente si no se especifica ningún emisor local; no se utiliza en el servicio. Cree un elemento <binding> en la sección de enlaces que puede utilizarse para comunicar con el servicio de token de seguridad. Para obtener más información acerca de cómo crear un enlace, vea Cómo: Especificar un enlace de servicio en la configuración.
Especifique el enlace creado en el paso anterior estableciendo los atributos bindingConfiguration y binding del elemento <issuer>.
No se utiliza en el cliente; opcional en el servicio. Cree <issuerMetadata> como elemento secundario del elemento <message>. A continuación, en un atributo address del elemento <issuerMetadata>, especifique la dirección en la que el servicio de token de seguridad publicará sus metadatos. De manera opcional, agregue un elemento secundario <identity> y especifique la identidad del servicio de token de seguridad
Opcional en el cliente y el servicio. Agregue un elemento <claimTypeRequirements> como elemento secundario del elemento <message>. Especifique las notificaciones obligatorias y opcionales en las que se basa el servicio agregando los elementos <add> of <claimTypeRequirements> al elemento <claimTypeRequirements>, y definiendo el tipo de notificación con el atributo claimType. Especifique si una notificación determinada es obligatoria u opcional estableciendo el atributo isOptional.
Ejemplo
El ejemplo de código siguiente muestra el código para configurar WSFederationHttpBinding de manera imperativa.
Consulte también
Tareas
Cómo deshabilitar sesiones seguras en WSFederationHttpBinding