Compartilhar via


Autorizando o acesso às operações de serviço

Este exemplo demonstra como usar o <serviceAuthorization> para habilitar o uso do atributo PrincipalPermissionAttribute para autorizar o acesso a operações de serviço. Este exemplo é baseado na amostra Introdução. O serviço e o cliente são configurados usando o <wsHttpBinding>. O atributo mode da <segurança> foi definido como Message e clientCredentialType foi definido como Windows. O PrincipalPermissionAttribute é aplicado a cada método de serviço e usada para restringir o acesso a cada operação. O chamador deve ser um administrador do Windows para acessar cada operação.

Nesta amostra, o cliente é um aplicativo de console (.exe) e o serviço é hospedado pelos Serviços de Informações da Internet (IIS).

Observação

O procedimento de instalação e as instruções de compilação dessa amostra estão no final deste tópico.

O arquivo de configuração de serviço usa o <serviceAuthorization> para definir o atributo principalPermissionMode:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- The serviceAuthorization behavior sets the
           principalPermissionMode to UseWindowsGroups.
           This puts a WindowsPrincipal on the current thread when a
           service is invoked. -->
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Definir a opção principalPermissionMode para UseWindowsGroups habilita o uso de PrincipalPermissionAttribute com base em nomes de grupo do Windows.

O PrincipalPermissionAttribute é aplicado a cada operação para exigir que o chamador faça parte do grupo de administradores do Windows, conforme mostrado no código de exemplo a seguir.

[PrincipalPermission(SecurityAction.Demand,
                             Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
    double result = n1 + n2;
    return result;
}

Quando você executa a amostra, as solicitações de operação e as respostas são exibidas na janela do console do cliente. O cliente se comunica com êxito com cada operação se estiver em execução em uma conta que faça parte do grupo Administradores; caso contrário, o acesso será negado. Para experimentar a falha de autorização, execute o cliente em uma conta que não faz parte do grupo Administradores. Pressione ENTER na janela do console para desligar o cliente.

Um serviço pode ser notificado de falhas de autorização implementando um IErrorHandler. Confira Estendendo o controle sobre o tratamento e relatório de erros para obter mais informações sobre a implementação de IErrorHandler.

Para configurar, compilar, e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de computador único ou entre computadores, siga as instruções em Como executar os exemplos do Windows Communication Foundation.