Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Controlar o acesso a recursos em um computador de domínio windows é uma tarefa básica de segurança. Por exemplo, apenas determinados usuários devem ser capazes de exibir dados confidenciais, como informações de folha de pagamento. Este tópico explica como restringir o acesso a um método exigindo que o usuário pertença a um grupo predefinido. Para obter um exemplo de trabalho, consulte Autorizando o acesso às operações de serviço.
A tarefa consiste em dois procedimentos separados. O primeiro cria o grupo e o popula com usuários. O segundo aplica a PrincipalPermissionAttribute classe para especificar o grupo.
Para criar um grupo do Windows
Abra o console de Gerenciamento de Computador .
No painel esquerdo, clique em Usuários e Grupos Locais.
Clique com o botão direito do mouse em Grupos e clique em Novo Grupo.
Na caixa Nome do Grupo , digite um nome para o novo grupo.
Na caixa Descrição , digite uma descrição do novo grupo.
Clique no botão Adicionar para adicionar novos membros ao grupo.
Se você se adicionou ao grupo e deseja testar o código a seguir, saia do computador e entre novamente para ser incluído no grupo.
Para exigir a associação do usuário
Abra o arquivo de código WCF (Windows Communication Foundation) que contém o código do contrato de serviço implementado. Para obter mais informações sobre como implementar um contrato, consulte Implementando contratos de serviço.
Aplique o PrincipalPermissionAttribute atributo a cada método que deve ser restrito a um grupo específico. Defina a Action propriedade como Demand e a Role propriedade como o nome do grupo. Por exemplo:
// Only members of the CalculatorClients group can call this method. [PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")] public double Add(double a, double b) { return a + b; }' Only members of the CalculatorClients group can call this method. <PrincipalPermission(SecurityAction.Demand, Role:="CalculatorClients")> _ Public Function Add(ByVal a As Double, ByVal b As Double) As Double Return a + b End FunctionObservação
Se você aplicar o PrincipalPermissionAttribute atributo a um contrato, um SecurityException será gerado. Você só pode aplicar o atributo no nível do método.
Usando um certificado para controlar o acesso a um método
Você também pode usar a classe para controlar o PrincipalPermissionAttribute acesso a um método se o tipo de credencial do cliente for um certificado. Para fazer isso, você deve ter o assunto e a impressão digital do certificado.
Para examinar um certificado para suas propriedades, consulte Como exibir certificados com o Snap-in do MMC. Para localizar o valor da impressão digital, consulte Como recuperar a impressão digital de um certificado.
Para controlar o acesso usando um certificado
Aplique a PrincipalPermissionAttribute classe ao método ao qual você deseja restringir o acesso.
Defina a ação do atributo como SecurityAction.Demand.
Defina a propriedade
Namecomo uma cadeia de caracteres que consiste no nome do assunto e na impressão digital do certificado. Separe os dois valores com um ponto-e-vírgula e um espaço, conforme mostrado no exemplo a seguir:// Only a client authenticated with a valid certificate that has the // specified subject name and thumbprint can call this method. [PrincipalPermission(SecurityAction.Demand, Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")] public double Multiply(double a, double b) { return a * b; }' Only a client authenticated with a valid certificate that has the ' specified subject name and thumbprint can call this method. <PrincipalPermission(SecurityAction.Demand, Name:="CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")> _ Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double Return a * b End FunctionDefina a propriedade PrincipalPermissionMode como UseAspNetRoles no exemplo de configuração a seguir.
<behaviors> <serviceBehaviors> <behavior name="SvcBehavior1"> <serviceAuthorization principalPermissionMode="UseAspNetRoles" /> </behavior> </serviceBehaviors> </behaviors>Configurar este valor como
UseAspNetRolesindica que a propriedadeNamedoPrincipalPermissionAttributeserá empregada para realizar uma comparação de cadeia de caracteres. Quando um certificado é usado como uma credencial de cliente, por padrão, o WCF concatena o nome comum do certificado e a impressão digital com um ponto e vírgula para criar um valor exclusivo para a identidade primária do cliente. ComUseAspNetRolesdefinido como oPrincipalPermissionModeno serviço, esse valor de identidade primária é comparado com o valor daNamepropriedade para determinar os direitos de acesso do usuário.Como alternativa, ao criar um serviço auto-hospedado, defina a PrincipalPermissionMode propriedade no código, conforme mostrado no código a seguir:
ServiceHost myServiceHost = new ServiceHost(typeof(Calculator), baseUri); ServiceAuthorizationBehavior myServiceBehavior = myServiceHost.Description.Behaviors.Find<ServiceAuthorizationBehavior>(); myServiceBehavior.PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles;Dim myServiceBehavior As ServiceAuthorizationBehavior myServiceBehavior = _ myServiceHost.Description.Behaviors.Find(Of ServiceAuthorizationBehavior)() myServiceBehavior.PrincipalPermissionMode = _ PrincipalPermissionMode.UseAspNetRoles