Назад | Перейти на главную страницу

ADFS - Как быть конкретным в заявлении о группах

Как указать конкретный набор групп для поиска и возврата при проверке подлинности 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);