ADFS : Comment récupérer les appartenances de groupes d'une forêt trustée dans les Claims ?
Par défaut, ADFS est capable de mettre dans un Claim les appartenances de groupe du domaine d’un utilisateur dans le jeton émis.
C’est relativement simple, une règle Built-in permet d’arriver à ça:
Toutefois, ADFS n'inclut pas les groupes d’une forêt Trustée dont on ferait partie.
Dans certains scénarios, cela peut avoir du sens, et c’est possible avec une règle custom, voyons voir comment faire ceci.
Nous allons avoir besoin de ces 5 règles:
Et dans mon exemple, ma forêt Trustée s’appelle EXT.local.
- Règle 1 - Récupérer le ForeignPrincipal
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://TrustGroups/phase1"), query = "objectSid={0};distinguishedName;EXT\username", param = c.Value);
- Règle 2 - Récupérer les Groupes dont le ForeignPrincipal fait partie
c:[Type == "http://TrustGroups/phase1"]
=> issue(store = "Active Directory", types = ("http://TrustGroups/phase2"), query = "(member:1.2.840.113556.1.4.1941:={0});distinguishedName;EXT\username", param = c.Value);
- Règle 3 - Mise en forme du Résultat #1
c:[Type == "http://TrustGroups/phase2"]
=> issue(Type = "http://TrustGroups/phase3", Value = regexreplace(c.Value, ",[^\n]*", ""));
- Règle 4 - Mise en forme du Résultat #2
c:[Type == "http://TrustGroups/phase3"]
=> issue(Type = "http://TrustGroups/phase4", Value = regexreplace(c.Value, "^CN=", ""));
- Règle 5 - Ajout des Groupes dans le Claim Group
c:[Type == "http://TrustGroups/phase4"]
=> issue(Type = "http://schemas.xmlsoap.org/claims/Group", Value = c.Value);
Et voici le résultat dans le Jeton:
NB: Il n’est pas nécessaire de faire un “=>issue” pour chaque phase (un simple “=>add” suffirait), mais dans l’exemple c’est plus simple et visuel, car on a le résultat de chaque phase dans le jeton.
Attention, c’est assez consommateur en performance, alors monitorez bien vos serveurs ADFS !