Когда следует использовать правило "Отправлять атрибуты LDAP как утверждения"
Это правило можно использовать в службы федерации Active Directory (AD FS) (AD FS), если требуется выдавать исходящие утверждения, содержащие фактические значения атрибутов протокола LDAP, которые существуют в хранилище атрибутов, а затем связать тип утверждения с каждым из атрибутов LDAP. Дополнительные сведения о хранилищах атрибутов см. в разделе "Роль хранилищ атрибутов".
При использовании этого правила одно утверждение выдается для каждого указанного атрибута LDAP, соответствующего логике правила, как описано в следующей таблице.
Параметр правила | Логика правила |
---|---|
сопоставление атрибутов LDAP с типами исходящих утверждений. | Если хранилище атрибутов совпадает с указанным хранилищем атрибутов, а атрибут LDAP равен указанному значению, сопоставьте значение атрибута LDAP с указанным типом исходящего утверждения и выдайте утверждение. |
В следующих разделах содержатся основные сведения о правилах утверждений. Кроме того, в них содержатся сведения об использовании правила "Отправлять атрибуты LDAP как утверждения".
Общие сведения о правилах утверждения
Правило утверждения представляет экземпляр бизнес-логики, который предусматривает применение к входящему утверждению условия (если X, то Y) и создание исходящего утверждения на основе параметров условия. В следующем списке перечислены важные рекомендации в отношении правил утверждений, с которыми следует ознакомиться перед прочтением дальнейших сведений в этом разделе.
В оснастке управления AD FS правила утверждений можно создавать только с помощью шаблонов правил утверждений.
Правила утверждений обрабатывают входящие утверждения непосредственно от поставщика утверждений (например, Active Directory или другой службы федерации) или из выходных данных правил преобразования принятия для отношения доверия с поставщиком утверждений.
Правила утверждений обрабатываются подсистемой выдачи утверждений в хронологическом порядке в пределах заданного набора правил. Установив приоритет правил, можно дополнительно уточнить или отфильтровать утверждения, созданные предыдущими правилами в данном наборе правил.
Шаблоны правил утверждения всегда требуют указывать тип входящего утверждения. Тем не менее, можно обрабатывать несколько значений утверждений с одним типом утверждения, используя одно правило.
Дополнительные сведения о правилах утверждений и наборах правил утверждений см. в разделе "Роль правил утверждений". Дополнительные сведения о том, как обрабатываются правила, см. в разделе "Роль обработчика утверждений". Дополнительные сведения об обработке наборов правил утверждений см. в разделе "Роль конвейера утверждений".
сопоставление атрибутов LDAP с типами исходящих утверждений.
При использовании шаблона правила "Отправлять атрибуты LDAP как утверждения" можно выбрать атрибуты из хранилища атрибутов LDAP, например Active Directory или служб AD DS, для отправки их значений как утверждений проверяющей стороне. По сути, при этом определенные атрибуты LDAP из указанного хранилища атрибутов сопоставляются с набором исходящих утверждений, которые могут использоваться для авторизации.
С помощью этого шаблона можно добавить несколько атрибутов, которые будут отправляться как несколько утверждений из одного правила. Например, можно использовать этот шаблон правила, чтобы создать правило, которое будет искать значения атрибутов для прошедших проверку подлинности пользователей в атрибутах Active Directory компания и отдел, а затем отправить эти значения как два разных исходящих утверждения.
Это правило также можно использовать для отправки всех членства в группах пользователя. Если вы хотите отправить только членство в отдельных группах, используйте правило "Отправлять членство в группах как утверждения". Дополнительные сведения см. в разделе When to Use a Send Group Membership as a Claim Rule.
Создание правила
Это правило можно создать с помощью языка правил утверждений или используя шаблон правила "Отправлять атрибуты LDAP как утверждения" в оснастке "Управление" AD FS. Этот шаблон правила предоставляет следующие возможности настройки:
указание имени правила утверждения;
выбор хранилища атрибутов, из которого требуется извлечь атрибуты LDAP;
сопоставление атрибутов LDAP с типами исходящих утверждений.
Дополнительные сведения о создании этого правила см. в статье "Создание правила для отправки атрибутов LDAP в качестве утверждений".
С помощью языка правил утверждений
Если запросу к Active Directory, службам AD DS или AD LDS необходимо выполнить сравнение с атрибутом LDAP, отличным от samAccountname, необходимо использовать настраиваемое правило. Если в наборе входных данных нет утверждения имени учетной записи Windows, также необходимо использовать настраиваемое правило, чтобы указать утверждение для запросов к AD DS или AD LDS.
Следующие примеры помогут вам понять различные способы создания настраиваемого правила с помощью языка правил утверждений для запроса и извлечения данных из хранилища атрибутов.
Пример. Как запросить хранилище атрибутов AD LDS и получить указанное значение
Параметры должны быть разделены точкой с запятой. Первый параметр — это фильтр LDAP. Последующие параметры — это атрибуты для возврата соответствующих объектов.
В следующем примере показано, как искать пользователя атрибутом sAMAccountName и выдавать утверждение адреса электронной почты, используя значение атрибута почты пользователя:
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "AD LDS", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"));
В следующем примере показано, как искать пользователя по атрибуту почты и выдавать утверждения Title и Display Name, используя значения атрибутов заголовка и отображаемого имени пользователя:
c:[Type == " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress ", Issuer == "AD AUTHORITY"]
=> issue(store = "AD LDS ", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/title","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "mail={0};title;displayname", param = c.Value);
В следующем примере показано, как искать пользователя по почте и заголовку, а затем выдавать утверждение отображаемого имени с помощью атрибута отображаемого имени пользователя:
c1:[Type == " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] && c2:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/title"]
=> issue(store = "AD LDS ", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "(&(mail={0})(title={1}));displayname", param = c1.Value, param = c2.Value);
Пример. Как запросить хранилище атрибутов Active Directory и вернуть указанное значение
Запрос Active Directory должен содержать имя пользователя (с доменным именем) в качестве конечного параметра, чтобы хранилище атрибутов Active Directory может запрашивать правильный домен. В противном случае синтаксис будет неверным.
В следующем примере показано, как выполнить поиск пользователя по атрибуту sAMAccountName в его домене, а затем получить атрибут mail:
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail;{1}", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);
Пример. Как запросить хранилище атрибутов Active Directory на основе значения входящего утверждения
c:[Type == "http://test/name"]
=> issue(store = "Enterprise AD Attribute Store",
types = ("http://test/email"),
query = ";mail;{0}",
param = c.Value)
Предыдущий запрос состоит из следующих трех частей:
Фильтр LDAP — укажите эту часть запроса для получения объектов, для которых необходимо запросить атрибуты. Общие сведения о допустимых запросах LDAP см. в документе RFC 2254. При запросе хранилища атрибутов Active Directory и не указан фильтр LDAP, предполагается, что запрос samAccountName={0} предполагается, что хранилище атрибутов Active Directory ожидает параметр, который может передать значение для {0}. В противном случае запрос приведет к ошибке. Для хранилища атрибутов LDAP, отличного от Active Directory, нельзя опускать часть с фильтром LDAP в составе запроса, иначе запрос приведет к ошибке.
Спецификация атрибута — во второй части запроса укажите атрибуты (несколько значений атрибутов разделяются запятыми), которые вам нужны из отфильтрованных объектов. Количество атрибутов, которые можно указать, должно соответствовать количеству типов утверждений, которые указываются в запросе.
Домен Active Directory — укажите последнюю часть запроса, только если это хранилище атрибутов Active Directory. (При запросе других хранилищ атрибутов не требуется.) Эта часть запроса используется для указания учетной записи пользователя в домене формы\name. Хранилище атрибутов Active Directory использует доменную часть для определения соответствующего контроллера домена, к которому нужно подключиться, и запроса атрибутов.
Пример. Как использовать два настраиваемых правила для извлечения электронного адреса руководителя из атрибута в Active Directory
Следующие два настраиваемых правила, которые используются вместе в приведенном ниже порядке, запрашивают Active Directory для атрибута диспетчера учетной записи пользователя (правило 1), а затем используйте этот атрибут для запроса учетной записи пользователя руководителя для атрибута почты (правило 2). Наконец, атрибут почты выдается как утверждение ManagerEmail. В итоге правило 1 запрашивает Active Directory и передает результат запроса правилу 2, которое затем извлекает значения электронной почты диспетчера.
Например, когда эти правила завершат работу, выдается утверждение, содержащее адрес электронной почты руководителя для пользователя в домене corp.fabrikam.com.
Правило 1
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> add(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/ManagerDistinguishedName"), query = "sAMAccountName=
{0};mail,userPrincipalName,extensionAttribute5,manager,department,extensionAttribute2,cn;{1}", param = regexreplace(c.Value, "(?
<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);
Правило 2
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
&& c1:[Type == "http://schemas.xmlsoap.org/claims/ManagerDistinguishedName"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/ManagerEmail"), query = "distinguishedName={0};mail;{1}", param = c1.Value,
param = regexreplace(c1.Value, ".*DC=(?<domain>.+),DC=corp,DC=fabrikam,DC=com", "${domain}\username"));
Примечание.
Эти правила работают только в том случае, если менеджер пользователя находится в том же домене, что и пользователь (corp.fabrikam.com в этом примере).
Дополнительная справка
Создание правила для отправки атрибутов LDAP в качестве утверждений