Quando usar uma regra de declaração de autorização

Você pode usar essa regra no AD FS (Serviços de Federação do Active Directory) quando precisar usar um tipo de declaração de entrada e aplicar uma ação que determinará se um usuário terá o acesso permitido ou negado, de acordo com o valor especificado na regra. Quando você usa essa regra, você passa ou transforma quaisquer declarações que correspondem à lógica da regra a seguir, com base em uma das opções configuradas na regra:

Opção de regras Lógica de regras
Permitir todos os usuários Se o tipo de declaração de entrada for igual a qualquer tipo de declaração e o valor for igual a qualquer valor, emita declarações com valores iguais a Permitir
Permitir o acesso a usuários com esta declaração de entrada Se o tipo de declaração de entrada for igual a tipo de declaração específico e o valor for igual a valor de declaração específico, emita declarações com valores iguais a Permitir
Negar o acesso a usuários com esta declaração de entrada Se o tipo de declaração de entrada for igual a tipo de declaração específico e o valor for igual a valor de declaração específico, emita declarações com valores iguais a Negar

As seções a seguir fornecem uma introdução básica às regras de declaração e mais detalhes sobre quando usar essa regra.

Sobre as regras de declaração

Uma regra de declaração representa uma instância de lógica de negócios que obterá uma declaração de entrada, aplicará uma condição a ela (se x, então y) e produzirá uma declaração de saída com base nos parâmetros da condição. A lista a seguir descreve dicas importantes que você deve conhecer sobre as regras de declaração antes de ler mais neste tópico:

  • No snap-in Gerenciamento do AD FS, as regras de declaração só podem ser criadas usando modelos de regra de declaração

  • Regras de declaração processam declarações de entrada diretamente de um provedor de declarações (como o Active Directory ou outro Serviço de Federação) ou da saída das regras de transformação de aceitação em uma relação de confiança com o provedor de declarações.

  • As regras de declaração são processadas pelo mecanismo de emissão de declarações em ordem cronológica dentro de um determinado conjunto de regras. Ao definir a precedência em regras, você pode refinar ou filtrar mais as declarações geradas pelas regras anteriores dentro de um determinado conjunto de regras.

  • Os modelos de regra de declaração sempre exigirão que você especifique um tipo de declaração de entrada. No entanto, você pode processar vários valores de declaração com o mesmo tipo de declaração usando uma única regra.

Para obter informações mais detalhadas sobre as regras de declaração e os conjuntos de regras de declaração, confira A função das regras de declaração. Para obter mais informações sobre como as regras são processadas, confira A função do mecanismo de declarações. Para obter mais informações sobre como os conjuntos de regras de declaração são processados, confira A função do pipeline de declarações.

Permitir todos os usuários

Quando você usa o modelo de regra Permitir todos os usuários, todos os usuários terão acesso à terceira parte confiável. No entanto, você pode usar regras de autorização adicionais para restringir o acesso. Se uma regra permitir que um usuário acesse a terceira parte confiável, e outra regra negar o acesso do usuário à terceira parte confiável, o resultado da negação substituirá o resultado da permissão e o usuário terá o acesso negado.

Usuários com acesso à terceira parte confiável do Serviço de Federação ainda podem ter o serviço negado pela terceira parte confiável.

Permitir o acesso a usuários com esta declaração de entrada

Quando você usa o modelo de regra Permitir ou negar usuários com base em uma declaração de entrada para criar uma regra e definir a condição de permissão, é possível permitir acesso de um usuário específico à terceira parte confiável de acordo com o tipo e o valor de uma declaração de entrada. Por exemplo, você pode usar esse modelo de regra para criar uma regra que permitirá somente usuários que tenham um grupo de declaração com um valor de Admins do domínio. Se uma regra permitir que um usuário acesse a terceira parte confiável, e outra regra negar o acesso do usuário à terceira parte confiável, o resultado da negação substituirá o resultado da permissão e o usuário terá o acesso negado.

Usuários com permissão de acesso à terceira parte confiável do Serviço de Federação ainda podem ter o serviço negado pela terceira parte confiável. Se você quiser permitir que todos os usuários tenham acesso à terceira parte confiável, use o modelo de regra Permitir todos os usuários.

Negar o acesso a usuários com esta declaração de entrada

Quando você usa o modelo de regra Permitir ou negar usuários com base em uma declaração de entrada para criar uma regra e definir a condição de permissão, pode permitir acesso de um usuário específico à terceira parte confiável de acordo com o tipo e o valor de uma declaração de entrada. Por exemplo, você pode usar esse modelo de regra para criar uma regra que rejeite todos os usuários que tenham uma declaração de grupo com um valor Usuários do domínio.

Se você quiser usar a condição negar, mas ainda permitir acesso à parte confiável para usuários específicos, você deve, mais tarde, adicionar regras de autorização explicitamente, com a condição de permitir que esses usuários acessem a terceira parte confiável.

Se um usuário tiver acesso negado quando o mecanismo de emissão de declarações processar o conjunto de regras, mais regras de processamento serão desativadas, e o AD FS retorna um erro "Acesso negado" à solicitação do usuário.

Autorizando usuários

No AD FS, regras de autorização são usadas para emitir uma permissão ou negar declarações que determinarão se um usuário ou um grupo de usuários (dependendo do tipo de declaração usado) poderão acessar recursos baseados na Web em uma terceira parte confiável ou não. As regras de autorização só podem ser definidas em objetos de confiança da terceira parte confiável.

Conjuntos de regras de autorização

Existem conjuntos de regras de autorização diferentes, dependendo do tipo de operação de permissão ou negação que você precisa configurar. Esses conjuntos de regra incluem:

  • Regras de Autorização de Emissão: essas regras determinam se um usuário pode receber declarações em nome de uma terceira parte confiável e, portanto, ter acesso à terceira parte confiável.

  • Regras de Autorização de Delegação: essas regras determinam se um usuário pode agir como outro usuário para a terceira parte confiável. Quando um usuário está agindo como outro usuário, declarações sobre o usuário solicitante ainda são colocadas no token.

  • Regras de Autorização de Representação: essas regras determinam se um usuário pode representar totalmente outro usuário para a terceira parte confiável. Representar outro usuário dessa maneira é um recurso muito poderoso, porque a terceira parte confiável não saberá que o usuário está sendo representado.

Para obter mais detalhes sobre como o processo de regra de autorização se encaixa no pipeline de emissão de declarações, consulte A função do mecanismo de emissão de declarações.

Tipos de declaração com suporte

O AD FS define dois tipos de declarações que são usados para determinar se um usuário é permitido ou negado. Esses URIs (Uniform Resource Identifier) de tipo de declaração são os seguintes:

  1. Permitir: http://schemas.microsoft.com/authorization/claims/permit

  2. Negar: http://schemas.microsoft.com/authorization/claims/deny

Como criar essa regra

Você pode criar as duas regras de autorização usando a linguagem de regra de declaração ou o modelo de regra Permitir todos os usuários ou Permitir ou negar usuários com base em uma declaração de entrada no snap-in de gerenciamento do AD FS. O modelo de regra Permitir todos os usuários não oferece opções de configuração. No entanto, o modelo de regra Permitir ou negar usuários com base em um modelo de regra de declaração de entrada fornece as seguintes opções de configuração:

  • Especificar um nome de regra de declaração

  • Especificar um tipo de declaração de entrada

  • Digitar um valor de declaração de entrada

  • Permitir o acesso a usuários com esta declaração de entrada

  • Negar o acesso a usuários com esta declaração de entrada

Para obter mais instruções sobre como criar esse modelo, consulte Criar uma regra para permitir todos os usuários ou Criar uma regra para permitir ou negar usuários com base em uma declaração de entrada no Guia de Implantação do AD FS.

Usando linguagem de regra de declaração

Se uma declaração dever ser enviada apenas quando o valor da declaração corresponder a um padrão personalizado, você deverá usar uma regra personalizada. Para obter mais informações, consulte When to Use a Custom Claim Rule.

Exemplo de como criar uma regra de autorização com base em várias declarações

Ao usar a sintaxe de linguagem da regra de declaração para autorizar declarações, uma declaração também pode ser emitida de acordo com a presença de várias declarações em declarações originais do usuário. A regra a seguir só emitirá uma declaração de autorização se o usuário for um membro do grupo Editores e foi autenticado usando a autenticação do Windows:

[type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod",
value == "urn:federation:authentication:windows" ]
&& [type == "http://schemas.xmlsoap.org/claims/Group ", value == "editors"]
=> issue(type = "http://schemas.xmlsoap.org/claims/authZ", value = "Granted");

Exemplo de como criar regras de autorização regras que delegarão quem pode criar ou remover relações de confiança de proxy do servidor de federação

Para que um Serviço de Federação possa usar um proxy de servidor de federação para redirecionar solicitações de cliente, uma relação de confiança deve ser estabelecida entre o Serviço de Federação e o computador proxy do servidor de federação. Por padrão, é estabelecida uma relação de confiança de proxy quando qualquer uma das seguintes credenciais é fornecida com êxito no assistente de configuração de Proxy do Servidor de Federação do AD FS:

  • A conta de serviço usada pelo Serviço de Federação que o proxy vai proteger

  • Uma conta de domínio do Active Directory que seja membro do grupo de administradores locais em todos os servidores de federação em um farm de servidores de federação

Quando você deseja especificar qual usuário ou usuários podem criar uma relação de confiança de proxy para determinado Serviço de Federação, você pode usar qualquer um dos seguintes métodos de delegação. Essa lista de métodos está em ordem de prioridade, de acordo com as recomendações da equipe de produto do AD FS dos métodos mais seguros e menos problemáticos de delegação. É necessário usar apenas um desses métodos, dependendo das necessidades da sua organização:

  1. Crie um grupo de segurança de domínio no Active Directory (por exemplo, FSProxyTrustCreators), adicione esse grupo ao grupo de administradores locais em cada um dos servidores de federação no farm e, em seguida, adicione somente as contas de usuário às quais você deseja delegar esse direito para o novo grupo. Este é o método preferencial.

  2. Adicione a conta de domínio do usuário ao grupo de administradores em cada um dos servidores de federação no farm.

  3. Se por alguma razão você não pode usar nenhum desses métodos, também pode criar uma regra de autorização para essa finalidade. Embora não seja recomendado, devido a possíveis complicações que poderão ocorrer se essa regra não estiver escrita corretamente, você pode usar uma regra de autorização personalizada para delegar quais domínio do Active Directory as contas de usuário também podem criar ou até mesmo remover relações de confiança entre todos os proxies do servidor de federação associados a determinado Serviço de Federação.

    Se você escolher o método 3, pode usar a seguinte sintaxe de regra para emitir uma declaração de autorização que permitirá que um usuário especificado (nesse caso, contoso\frankm) crie relações de confiança para um ou mais proxies do servidor de federação para o Serviço de Federação. Você deve aplicar essa regra usando o comando do Windows PowerShell Set-ADFSProperties AddProxyAuthorizationRules.

    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", issuer=~"^AD AUTHORITY$" value == "contoso\frankm" ] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true")
    
    exists([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-32-544", Issuer =~ "^AD AUTHORITY$"])
    => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true");
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^AD AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustManagerSid({0})", param= c.Value );
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/proxytrustid", Issuer =~ "^SELF AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustProvisioned({0})", param=c.Value );
    

    Posteriormente, se você quiser remover o usuário para que ele não possa mais criar relações de confiança de proxy, poderá reverter para a regra de autorização de confiança de proxy padrão para remover o direito de usuário de criar relações de confiança do proxy para o Serviço de Federação. Você deve também aplicar essa regra usando o comando do Windows PowerShell Set-ADFSProperties AddProxyAuthorizationRules.

    exists([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-32-544", Issuer =~ "^AD AUTHORITY$"])
    => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true");
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^AD AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustManagerSid({0})", param= c.Value );
    
    c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/proxytrustid", Issuer =~ "^SELF AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustProvisioned({0})", param=c.Value );
    

Para obter mais informações sobre como usar a linguagem da regra de declaração, confira A função da linguagem da regra de declaração.