Provavelmente, seria uma boa ideia ler primeiro como funcionam as regras de reivindicação. Eu encontrei os seguintes artigos de technet bastante úteis:
Reivindicações do AD FS 2.0 Iniciador da linguagem de regras
Entendendo a linguagem de regra de declaração no AD FS 2.0 & Maior
A versão curta é que você acaba agrupando várias regras de declaração que "armazenam" dados de consulta e ajustam / filtram os dados antes de realmente "emitir" a declaração com os grupos resultantes.
Aqui está um exemplo que usamos em nosso ambiente. Para essa parte confiável específica, queríamos retornar todas as associações de grupo começando com "myapp". incluindo grupos aninhados.
-
Regra 1: buscar o DN do usuário
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://contoso.com/UserDN"), query = ";distinguishedName;{0}", param = c.Value);
-
Regra 2: Buscar todos os CNs de grupos aninhados usando o atributo de membro
c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] && c2:[Type == "http://contoso.com/UserDN"] => add(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/Group"), query = "(member:1.2.840.113556.1.4.1941:={1});cn;{0}", param = c1.Value, param = c2.Value);
-
Regra 3: filtre os grupos resultantes usando o Regex
c:[Type == "http://schemas.xmlsoap.org/claims/Group", Value =~ "(?i)^myapp\."] => issue(claim = c);