Como: Representar um cliente em um serviço

Representar um cliente em um serviço do Windows Communication Foundation (WCF) permite que o serviço execute ações em nome do cliente. Para ações sujeitas a verificações de lista de controle de acesso (ACL), como acesso a diretórios e arquivos em uma máquina ou acesso a um banco de dados do SQL Server, a verificação da ACL é em relação à conta de usuário cliente. Este tópico mostra as etapas básicas necessárias para permitir que um cliente em um domínio do Windows defina um nível de representação de cliente. Para obter um exemplo prático disso, consulte Personificando o cliente. Para obter mais informações sobre representação de cliente, consulte Delegação e representação.

Nota

Quando o cliente e o serviço estão sendo executados no mesmo computador e o cliente está sendo executado em uma conta do sistema (ou seja, Local System ou Network Service), o cliente não pode ser representado quando uma sessão segura é estabelecida com tokens de contexto de segurança com monitoração de estado. Um aplicativo WinForms ou de console normalmente é executado na conta conectada no momento, para que a conta possa ser representada por padrão. No entanto, quando o cliente é uma página ASP.NET e essa página está hospedada no IIS 6.0 ou IIS 7.0, o cliente é executado sob a Network Service conta por padrão. Todas as associações fornecidas pelo sistema que suportam sessões seguras usam um token de Contexto de Segurança sem estado por padrão. No entanto, se o cliente for uma página de ASP.NET e sessões seguras com tokens de contexto de segurança com monitoração de estado forem usadas, o cliente não poderá ser representado. Para obter mais informações sobre como usar tokens de contexto de segurança com monitoração de estado em uma sessão segura, consulte Como criar um token de contexto de segurança para uma sessão segura.

Para habilitar a representação de um cliente a partir de um token do Windows armazenado em cache em um serviço

  1. Crie o serviço. Para obter um tutorial deste procedimento básico, consulte Tutorial de introdução.

  2. Use uma associação que use a autenticação do Windows e crie uma sessão, como NetTcpBinding ou WSHttpBinding.

  3. Ao criar a implementação da interface do serviço, aplique a OperationBehaviorAttribute classe ao método que requer representação do cliente. Defina a propriedade Impersonation como 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 definir o nível de representação permitido no cliente

  1. Crie o código do cliente de serviço usando a ServiceModel Metadata Utility Tool (Svcutil.exe). Para obter mais informações, consulte Acessando serviços usando um cliente WCF.

  2. Depois de criar o cliente WCF, defina a AllowedImpersonationLevelWindowsClientCredential propriedade da classe para um dos TokenImpersonationLevel valores de enumeração.

    Nota

    Para usar Delegation, a autenticação Kerberos negociada (às vezes chamada de Kerberos de várias pernas ou várias etapas ) deve ser usada. Para obter uma descrição de como implementar isso, consulte Práticas recomendadas de segurança.

    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
    

Consulte também