Procedimiento para suplantar a un cliente en un servicio
La suplantación de un cliente en un servicio Windows Communication Foundation (WCF) permite que el servicio realice 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 obtener un ejemplo ilustrativo, consulte Impersonating the Client. Para obtener más información sobre la suplantación del cliente, consulte Delegación y suplantación.
Nota
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 ISS 6.0 o ISS 7.0, el cliente se ejecuta en la cuenta Network Service
de forma predeterminada. 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 se usan sesiones seguras con tokens de contexto de seguridad con estado, no se puede suplantar al cliente. Para obtener más información sobre el uso de tokens de contexto de seguridad con estado en una sesión segura, consulte Procedimiento para crear un token de contexto de seguridad con estado 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
Cree el servicio. Para obtener un tutorial sobre este procedimiento básico, consulte Getting Started Tutorial.
Utilice un enlace que use autenticación de Windows y cree una sesión, como NetTcpBinding o WSHttpBinding.
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 double Add(double a, double b) { return a + b; }
<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
Para establecer el nivel de suplantación permitido en el cliente
Cree el código de cliente del servicio mediante ServiceModel Metadata Utility Tool (Svcutil.exe). Para obtener más información, consulte Acceso a servicios mediante un cliente WCF.
Después de la creación del cliente WCF, establezca la propiedad AllowedImpersonationLevel de la clase WindowsClientCredential en uno de los valores de enumeración TokenImpersonationLevel.
Nota
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 implementarlo, consulte Procedimientos recomendados para la seguridad.
CalculatorClient client = new CalculatorClient("CalculatorEndpoint"); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Dim client As New CalculatorClient("CalculatorEndpoint") client.ClientCredentials.Windows.AllowedImpersonationLevel = _ System.Security.Principal.TokenImpersonationLevel.Impersonation