Compartilhar via


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 um computador ou acesso a um banco de dados do SQL Server, a verificação de ACL é feita na conta de usuário do cliente. Este tópico mostra as etapas básicas necessárias para habilitar um cliente em um domínio do Windows para definir um nível de representação do cliente. Para obter um exemplo funcional disso, consulte Como representar o cliente. Para obter mais informações sobre a representação do cliente, consulte Delegação e Representação.

Observação

Quando o cliente e o serviço estão em execução no mesmo computador e o cliente está em execução 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 estado. Normalmente, um aplicativo WinForms ou de console é executado na conta registrada no momento, para que essa conta possa ser representada por padrão. No entanto, quando o cliente é uma página ASP.NET e essa página é hospedada no IIS 6.0 ou no IIS 7.0, o cliente é executado na conta Network Service por padrão. Todas as associações fornecidas pelo sistema que dão suporte a 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 ASP.NET e sessões seguras com tokens de Contexto de Segurança com 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 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 de um token do Windows armazenado em cache em um serviço

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

  2. Use uma associação que usa autenticação do Windows e cria uma sessão, como NetTcpBinding ou WSHttpBinding.

  3. Ao criar a implementação da interface do serviço, aplique a classe OperationBehaviorAttribute 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 Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe). Para obter mais informações, consulte Acessando serviços usando um cliente WCF.

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

    Observação

    Para usar Delegation, a autenticação Kerberos negociada (às vezes chamada de Kerberos de várias etapas ou de vários passos ) deve ser usada. Para obter uma descrição de como implementar isso, consulte Melhores Práticas para 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
    

Confira também