Quando usar uma regra de declaração personalizada

Você grava uma regra de declaração personalizada nos Serviços de Federação do Active Directory (AD FS) usando o idioma da regra de declaração, que é a estrutura que o mecanismo de emissão de declarações usa para gerar, transformar, passar e filtrar as declarações de forma programática. Usando uma regra personalizada, você pode criar regras com lógica mais complexa do que um modelo de regra padrão. Considere o uso de uma regra personalizada quando quiser:

  • Enviar declarações com base nos valores extraídos de um repositório de atributos de linguagem SQL.

  • Envie declarações com base nos valores extraídos de um repositório de atributos de protocolo LDAP, usando um filtro de LDAP personalizado.

  • Enviar declarações com base nos valores extraídos de um repositório de atributos personalizados.

  • Enviar declarações somente quando duas ou mais declarações de entrada estão presentes.

  • Enviar declarações somente quando uma declaração de uma entrada corresponder a um padrão complexo.

  • Enviar declarações com alterações complexas em um valo de declaração de entrada.

  • Criar declarações para uso apenas em regras posteriores, sem realmente enviar as declarações.

  • Construir uma declaração de saída do conteúdo de mais de uma declaração de entrada.

Você também pode usar uma regra personalizada quando o valor da declaração de saída se basear no valor da declaração e entrada, mas também deve incluir conteúdo adicional.

A linguagem da regra de declarações é baseada em regras. Ele tem uma parte de condição e uma parte da execução. Você pode usar a sintaxe de linguagem da regra de declaração para enumerar, adicionar, excluir ou modificar declarações para atender às necessidades da sua organização. Para obter mais informações sobre como cada uma dessas partes funciona, consulte A função do idioma da regra de declaração.

As seções a seguir fornecem uma introdução básica às regras de declaração. Elas também fornecem detalhes sobre quando usar uma regra de declaração personalizada.

Sobre as regras de declaração

Uma regra de declaração representa uma instância da lógica de negócios que usa uma declaração de entrada, aplica uma condição a ela (se x então y) e produz uma declaração de saída com base nos parâmetros da condição.

Importante

  • No snap-in Gerenciamento do AD FS, é possível criar as regras de declaração somente usando os 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 ainda mais as declarações geradas por regras anteriores dentro de determinado conjunto de regras.
  • Modelos de regras de declaração sempre exigirão 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, consulte 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, consulte A função do pipeline de declarações.

Como criar essa regra

Você criará essa regra primeiro criando a sintaxe necessária à operação usando o idioma da regra de declaração e, em seguida, colando o resultado na caixa de texto fornecida no modelo Enviar uma Declaração Usando uma Regra Personalizada nas propriedades de um objeto de confiança do provedor de declarações ou uma terceira parte confiável no snap-in Gerenciamento do AD FS.

Essa regra fornece as seguintes opções:

  • Especificar um nome de regra de declaração

  • Digite uma ou mais condições opcionais e uma declaração de emissão usando o idioma da regra de declaração do AD FS

Para obter mais instruções para criar uma regra personalizada usando esse modelo, consulte Criar uma regra para enviar declarações usando uma regra personalizada no Guia de implantação do AD FS.

Para melhor compreensão de como funciona a linguagem da regra de declaração, exiba a sintaxe de linguagem da regra de declaração de outras regras que já existem no snap-in clicando na guia Exibir Linguagem da Regra nas propriedades dessa regra. O uso das informações nesta seção e das informações de sintaxe dessa guia pode fornecer informações sobre como criar suas próprias regras personalizadas.

Para obter mais informações sobre como usar o idioma da regra de declaração, consulte A função do idioma da regra de declaração.

Usando linguagem de regra de declaração

Exemplo: como combinar nomes e sobrenomes com base nos valores de atributo de nome de um usuário

A sintaxe de regra a seguir combina nomes e sobrenomes de valores de atributo em determinado repositório de atributos. O mecanismo de políticas forma um produto cartesiano de correspondências para cada condição. Por exemplo, a saída para o primeiro nome {"Frank", "Alan"} e sobrenomes {"Miller", "Shen"} é {"Frank Miller", "Frank Shen", "Alan Miller", "Alan Shen" }:

c1:[type == "http://exampleschema/firstname" ]
&&  c2:[type == "http://exampleschema/lastname",]
=> issue(type = "http://exampleschema/name", value = c1.value + "  " + c2.value);

Exemplo: como emitir uma declaração de gerenciador com base em se os usuários têm subordinados diretos ou não

A regra a seguir emite uma declaração de gerenciador apenas se o usuário tiver subordinados diretos:

c:[type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] => add(store = "SQL Store", types = ("http://schemas.xmlsoap.org/claims/Reports"), query = "SELECT Reports FROM dbo.DirectReports WHERE UserName = {0}", param = c.value );
count([type == "http://schemas.xmlsoap.org/claims/Reports"] ) > 0 => issue(= "http://schemas.xmlsoap.org/claims/ismanager", value = "true");

Exemplo: como emitir uma declaração PPID com base em um atributo LDAP

A regra a seguir emite uma declaração PPID (Identificador Pessoal Privado) com base nos atributos windowsaccountname e originalissuer para usuários em um repositório de atributos LDAP:

c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
 => issue(store = "_OpaqueIdStore", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"), query = "{0};{1};{2}", param = "ppid", param = c.Value, param = c.OriginalIssuer);

Atributos comuns que podem ser usados para identificar exclusivamente o usuário para essa consulta incluem o seguinte:

  • SID de usuário

  • windowsaccountname

  • samaccountname