Compartir a través de


Cómo crear un comprobador de identidad de cliente personalizado

La característica de identidad de Windows Communication Foundation (WCF) permite a un cliente especificar de antemano la identidad deseada para el servicio. Siempre que un servidor se autentica al cliente, se comprueba la identidad frente a la identidad prevista. (Para obtener información acerca de la identidad y su funcionamiento, vea Identidad del servicio y autenticación.)

En caso necesario, la comprobación puede personalizarse mediante un comprobador de identidad personalizado. Por ejemplo, puede realizar controles adicionales de comprobación de identidad del servicio. En este ejemplo, el comprobador de identidad personalizado controla las notificaciones adicionales del certificado X.509 devueltas desde el servidor. Para obtener una aplicación de ejemplo, consulte Identity.

Para extender la clase EndpointIdentity

  1. Defina una nueva clase derivada de la clase EndpointIdentity. Este ejemplo asigna nombre a la OrgEndpointIdentity de la extensión

  2. Agregue los miembros privados y las propiedades que utilizará la clase IdentityVerifier extendida para realizar la comprobación de identidad frente a las notificaciones del token de seguridad devueltas por el servicio. Este ejemplo define una propiedad: OrganizationClaim.

Para extender la clase IdentityVerifier

  1. Defina una nueva clase derivada de IdentityVerifier. Este ejemplo asigna nombre a la CustomIdentityVerifier de la extensión

  2. Invalide el método CheckAccess. El método determina si la comprobación de la identidad tuvo éxito o fue fallida.

  3. El método CheckAccess posee dos parámetros. El primero es una instancia de la clase EndpointIdentity. El segundo es una instancia de la clase AuthorizationContext.

    En la implementación del método, examine la colección de notificaciones devuelta por la propiedad ClaimSets de la clase AuthorizationContext, y realice las comprobaciones de autenticación necesarias. Este ejemplo comienza buscando cualquier notificación de tipo "Nombre distintivo" y, a continuación, compara el nombre con la extensión de EndpointIdentity (OrgEndpointIdentity).

Para implementar el método TryGetIdentity

  1. Implemente el método TryGetIdentity, que determina si el cliente puede devolver una instancia de la clase EndpointIdentity. La infraestructura WCF llama primero a la implementación del método TryGetIdentity para recuperar la identidad del servicio desde el mensaje. Después, la infraestructura llama a la implementación CheckAccess con la EndpointIdentity devuelta y a AuthorizationContext.

  2. En el método TryGetIdentity, agregue el siguiente código:

Para implementar un enlace personalizado y establecer el método IdentityVerifier personalizado

  1. Cree un método que devuelva un objeto Binding. Este ejemplo comienza creando una instancia de la clase WSHttpBinding y estableciendo su modo de seguridad en Message, y su ClientCredentialType en None.

  2. Cree una BindingElementCollection mediante el método CreateBindingElements.

  3. Recupere el SecurityBindingElement de la colección y conviértalo a una variable SymmetricSecurityBindingElement.

  4. Establezca la propiedad IdentityVerifier de la clase LocalClientSecuritySettings a una nueva instancia de la clase CustomIdentityVerifier creada anteriormente.

  5. El enlace personalizado devuelto se utiliza para crear una instancia del cliente y la clase. El cliente puede realizar un control de comprobación de identidad personalizada del servicio, como muestra el código siguiente.

Ejemplo

En el siguiente ejemplo se muestra una implementación de la clase IdentityVerifier completa.

En el siguiente ejemplo se muestra una implementación de la clase EndpointIdentity completa.

Consulte también

Referencia

ServiceAuthorizationManager
EndpointIdentity
IdentityVerifier

Otros recursos

Identity Sample
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample