Как указать конкретный набор групп для поиска и возврата при проверке подлинности ADFS вместо поиска и возврата всех групп пользователя в ответном сообщении?
Это вопрос в ответ на ответ Джима Б на этот вопрос: Получение вложенных групп пользователей в ADFS
Джим сказал: «Вам следует указать конкретную группу, которую вы ищете, вместо того, чтобы возвращать все группы, помимо проблем с безопасностью и производительностью на сервере, большое количество возвращенных групп может вызвать сканирование вашего приложения. - Джим Б. 11 августа. 15 в 18:25 "
Возможно, было бы неплохо сначала прочитать, как работают правила утверждений. Мне очень помогли следующие технические статьи:
Учебник по языку правил утверждений AD FS 2.0
Понимание языка правил утверждений в AD FS 2.0 и выше
Краткая версия заключается в том, что вы в конечном итоге объединяете различные правила утверждений, которые «хранят» данные запроса, а затем настраиваете / фильтруете данные, прежде чем вы фактически «отправите» утверждение в результирующие группы.
Вот пример, который мы используем в нашей среде. Для этой конкретной проверяющей стороны мы хотели вернуть все членства в группах, начинающиеся с «myapp». включая вложенные группы.
Правило 1. Получите DN пользователя.
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);
Правило 2: получить все CN вложенных групп с помощью атрибута member
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);
Правило 3: отфильтруйте результирующие группы с помощью Regex
c:[Type == "http://schemas.xmlsoap.org/claims/Group", Value =~ "(?i)^myapp\."]
=> issue(claim = c);