Cómo: Configurar las credenciales en un servicio de federación

En Windows Communication Foundation (WCF), crear un servicio federado consta de los siguientes procedimientos principales:

  1. Configurar un WSFederationHttpBinding o un enlace personalizado similar. Para obtener más información sobre crear un enlace adecuado, vea Cómo: Crear un WSFederationHttpBinding.

  2. Configurar el IssuedTokenServiceCredential que controla cómo se autentican los tokens emitidos que se presentan al servicio.

En este tema se proporcionan los detalles sobre el segundo paso. Para obtener más información sobre cómo funciona un servicio federado, vea Federación.

Para establecer las propiedades de IssuedTokenServiceCredential en el código

  1. Utilice la propiedad IssuedTokenAuthentication de la clase ServiceCredentials para devolver una referencia a una instancia IssuedTokenServiceCredential. Se obtiene acceso a la propiedad desde la propiedad Credentials de la clase ServiceHostBase.

  2. Establezca la propiedad AllowUntrustedRsaIssuers en true si los tokens emitidos automáticamente como las tarjetas CardSpace se van a autenticar. El valor predeterminado es false.

  3. Rellene la colección devuelta por la propiedad KnownCertificates con instancias de la clase X509Certificate2. Cada instancia representa un emisor desde el que el servicio autenticará los tokens.

    ms730131.note(es-es,VS.100).gifNota:
    A diferencia de la colección del lado del cliente devuelta por la propiedad ScopedCertificates, la colección de certificados conocida no es una colección con clave. El servicio acepta los tokens que los certificados especificados emiten sin tener en cuenta la dirección del cliente que envió el mensaje con el token emitido (sujeto a las restricciones siguientes, que se describirán más adelante).

  4. Establezca la propiedad CertificateValidationMode en uno de los valores de enumeración X509CertificateValidationMode. Esto solo se puede hacer en código. El valor predeterminado es ChainTrust.

  5. Si la propiedad CertificateValidationMode está establecida en Custom, asigne a continuación una instancia de la clase personalizada X509CertificateValidator a la propiedad CustomCertificateValidator.

  6. Si CertificateValidationMode está definido en ChainTrust o PeerOrChainTrust, defina la propiedad RevocationMode en un valor apropiado de la enumeración X509RevocationMode. Tenga en cuenta que el modo de revocación no se utiliza en PeerTrust ni en los modos de validación Custom.

  7. Si es necesario, asigne una instancia de una clase SamlSerializer personalizada a la propiedad SamlSerializer. Se necesita un serializador del Lenguaje de marcado de aserción de seguridad (SAML) personalizado, por ejemplo, para analizar las aserciones de SAML personalizadas.

Para establecer las propiedades de IssuedTokenServiceCredential en la configuración

  1. Cree un elemento <issuedTokenAuthentication>< como elemento secundario de un elemento serviceCredentials>.

  2. Establezca el atributo allowUntrustedRsaIssuers del elemento <issuedTokenAuthentication> en true si se autentica un token que se emitió a sí mismo como una tarjeta CardSpace.

  3. Cree un elemento <knownCertificates><issuedTokenAuthentication> como elemento secundario del elemento .

  4. Cree cero o más elementos <add><knownCertificates> como elementos secundarios del elemento storeLocation y especifique cómo buscar el certificado mediante los atributos storeName, x509FindType, findValue y .

  5. Si es necesario, establezca el atributo samlSerializer del elemento <issuedTokenAuthentication> en el nombre de tipo de la clase SamlSerializer personalizada.

Ejemplo

El siguiente ejemplo define las propiedades de un IssuedTokenServiceCredential en el código.

' This method configures the IssuedTokenAuthentication property of a ServiceHost.
Public Shared Sub ConfigureIssuedTokenServiceCredentials( _
    ByVal sh As ServiceHost, _
    ByVal allowCardspaceTokens As Boolean, _
    ByVal knownissuers As IList(Of X509Certificate2), _
    ByVal certMode As X509CertificateValidationMode, _
    ByVal revocationMode As X509RevocationMode, _
    ByVal ser As SamlSerializer _
    )
    ' Allow CardSpace tokens.
    sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = _
    allowCardspaceTokens

    ' Set up known issuer certificates.
    Dim cert As X509Certificate2
    For Each cert In knownissuers
        sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add(cert)
    Next cert
    ' Set issuer certificate validation and revocation checking modes.
    sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = _
        X509CertificateValidationMode.PeerOrChainTrust
    sh.Credentials.IssuedTokenAuthentication.RevocationMode = _
    X509RevocationMode.Online

    ' Set the SamlSerializer, if one is specified.
    If Not (ser Is Nothing) Then
        sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser
    End If
End Sub
// This method configures the IssuedTokenAuthentication property of a ServiceHost.
public static void ConfigureIssuedTokenServiceCredentials( 
    ServiceHost sh, bool allowCardspaceTokens, IList<X509Certificate2> knownissuers, 
    X509CertificateValidationMode certMode, X509RevocationMode revocationMode, SamlSerializer ser )
{
  // Allow CardSpace tokens.
  sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = allowCardspaceTokens;
  
  // Set up known issuer certificates.
  foreach(X509Certificate2 cert in knownissuers)
    sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add ( cert );

  // Set issuer certificate validation and revocation checking modes.
  sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = 
      X509CertificateValidationMode.PeerOrChainTrust;
  sh.Credentials.IssuedTokenAuthentication.RevocationMode = X509RevocationMode.Online;
  sh.Credentials.IssuedTokenAuthentication.TrustedStoreLocation = StoreLocation.LocalMachine;

  // Set the SamlSerializer, if one is specified.
  if ( ser != null )
    sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser;
}

Para que un servicio federado autentique un cliente, debe cumplirse lo siguiente sobre el token emitido:

  • Cuando la firma digital del token emitido utiliza un identificador de clave de seguridad de RSA, la propiedad AllowUntrustedRsaIssuers debe ser true.

  • Cuando la firma del token emitido utiliza un número de serie de emisor de X.509, un identificador de clave de sujeto (SKI) de X.509 o un identificador de seguridad de huella digital de X.509, un certificado debe firmar el token emitido en la colección devuelta por la propiedad KnownCertificates de la clase IssuedTokenServiceCredential.

  • Cuando se firma el token emitido utilizando un certificado X.509, el certificado debe validarse por la semántica especificada por el valor de la propiedad CertificateValidationMode, sin tener en cuenta si el certificado se envió al usuario de confianza como X509RawDataKeyIdentifierClause o se obtuvo de la propiedad KnownCertificates. Para obtener más información sobre la validación del certificado X.509, vea Trabajar con certificados.

Por ejemplo, establecer CertificateValidationMode en PeerTrust autenticaría cualquier token emitido cuyo certificado de firma esté en el almacén de certificados TrustedPeople. En ese caso, defina la propiedad TrustedStoreLocation en CurrentUser o LocalMachine. Puede seleccionar otros modos, incluidos Custom. Cuando Custom está seleccionado, debe asignar una instancia de la clase X509CertificateValidator a la propiedad CustomCertificateValidator. El validador personalizado puede validar los certificados utilizando cualquier criterio que le guste. Para obtener más información, vea Cómo crear un servicio que emplee un validador de certificado personalizado.

Vea también

Tareas

Ejemplo de federación
Cómo deshabilitar sesiones seguras en WSFederationHttpBinding
Cómo: Crear un WSFederationHttpBinding
Cómo crear un cliente federado

Conceptos

Federación
Federación y confianza
Trabajar con certificados
Modos de autenticación de SecurityBindingElement