Cómo suplantar a un cliente en un servicio

Suplantar un cliente en un servicio de Windows Communication Foundation (WCF) permite al servicio realizar acciones en nombre del cliente. Para las acciones sujetas a las comprobaciones de la lista de control de acceso (ACL), como el acceso a los directorios y archivos de un equipo o el acceso a una base de datos de SQL Server, ACL realiza una comprobación frente a la cuenta de usuario del cliente. Este tema muestra los pasos básicos requeridos para permitir a un cliente de un dominio de Windows establecer un nivel de la suplantación del cliente. Para ver un ejemplo práctico de esto, vea Impersonating the Client. Para obtener más información sobre la suplantación de cliente, vea Delegación y suplantación con WCF.

ms731090.note(es-es,VS.100).gifNota:
Cuando el cliente y el servicio se están ejecutando en el mismo equipo y el cliente se está ejecutando bajo una cuenta del sistema (por ejemplo, Local System o Network Service), no se puede suplantar el cliente cuando se establece una sesión segura con tokens de contexto de seguridad con estado. Un WinForms o una aplicación de consola se ejecuta normalmente con la cuenta con la que haya iniciado la sesión, de manera que la cuenta pueda suplantarse de manera predeterminada. No obstante, cuando el cliente es una página ASP.NET que se hospeda en IIS 6.0 o ISS 7.0, el cliente se ejecuta, de manera predeterminada, en la cuenta Network Service. Todos los enlaces proporcionados por el sistema que admiten sesiones seguras utilizan de forma predeterminada un token de contexto de seguridad sin estado. Sin embargo, si el cliente es una página ASP.NET y las sesiones seguras con tokens de seguridad de contexto se utilizan, no se puede suplantar el cliente. Para obtener más información sobre uso de tokens de seguridad de contexto con estado en una sesión segura, vea Cómo: Crear un token de contexto de seguridad para una sesión segura.

Para habilitar la suplantación de un cliente desde un token de Windows almacenado en memoria caché en un servicio

  1. Cree el servicio. Para obtener un tutorial sobre este procedimiento básico, vea Tutorial de introducción.

  2. Utilice un enlace que use autenticación de Windows y cree una sesión, como NetTcpBinding o WSHttpBinding.

  3. Al crear la implementación de la interfaz del servicio, aplique la clase OperationBehaviorAttribute al método que requiere la suplantación del cliente. Establezca la propiedad Impersonation en Required.

    <OperationBehavior(Impersonation := ImpersonationOption.Required)>  _
    Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
       Implements ICalculator.Add
        Return a + b
    End Function 
    
    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public double Add(double a, double b)
    {
        return a + b;
    }
    

Para establecer el nivel de suplantación permitido en el cliente

  1. Cree el código de cliente del servicio utilizando Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe). Para obtener más información, vea Acceso a los servicios mediante un cliente WCF.

  2. Después de crear el cliente WCF, establezca la propiedad AllowedImpersonationLevel de la clase WindowsClientCredential en uno de los valores de enumeración TokenImpersonationLevel.

    ms731090.note(es-es,VS.100).gifNota:
    Para usar Delegation, la autenticación de Kerberos negociada (a veces conocida como Kerberos multibifurcación o multipaso) se ha de usar. Para obtener una descripción sobre cómo implementar esto, vea Procedimientos recomendados acerca de seguridad en WCF.

    Dim client As New CalculatorClient("CalculatorEndpoint")
    client.ClientCredentials.Windows.AllowedImpersonationLevel = _
        System.Security.Principal.TokenImpersonationLevel.Impersonation
    
    CalculatorClient client = new CalculatorClient("CalculatorEndpoint");
    client.ClientCredentials.Windows.AllowedImpersonationLevel =
        System.Security.Principal.TokenImpersonationLevel.Impersonation;
    

Vea también

Tareas

Impersonating the Client

Referencia

OperationBehaviorAttribute
TokenImpersonationLevel

Conceptos

Delegación y suplantación con WCF