Роль механизма утверждений

На самом высоком уровне подсистема утверждений в службы федерации Active Directory (AD FS) (AD FS) — это механизм на основе правил, предназначенный для обслуживания и обработки запросов утверждений для службы федерации. Модуль утверждений — единственный компонент службы федерации, отвечающий за применение каждого набора правил ко всем настроенным федеративным отношениям доверия и передачу результата в конвейер утверждений.

В то время как конвейер утверждений — это скорее логическая сущность в рамках процесса передачи утверждений, правила утверждений являются более реальным административным элементом, который можно использовать для настройки потока утверждений в процессе выполнения правил утверждений. Подробнее о процессе работы конвейера см. в разделе The Role of the Claims Pipeline.

Как показано на рисунке ниже, процесс принятия входящих утверждений (правила принятия), авторизации инициаторов запросов утверждений (правила авторизации) и выпуска исходящих утверждений (правила выпуска) посредством правил утверждений для всех федеративных отношений доверия в организации выполняется модулем утверждений.

Illustration that shows the processes performed by the claims engine.

Процесс выполнения правил утверждений

При настройке отношения доверия с поставщиком утверждений или проверяющей стороной в организации с помощью правил утверждений, набор или наборы правил утверждений для этого отношения доверия выступают в роли привратника для входящих утверждений, предписывая модулю утверждений применить необходимую логику в правилах утверждений для определения того, следует ли выпустить какие-либо утверждения и какие именно.

В следующем подразделе описывается каждое из действий, которое выполняется модулем в потоке выполнения правил утверждения. Каждое из описанных действий производится на каждом этапе процесса конвейерной обработки утверждений. Эти настройки включают:

  • Шаг 1. Инициализация

  • Шаг 2. Выполнение

  • Шаг 3. Результат выполнения

Подробнее о процессе работы конвейера см. в разделе The Role of the Claims Pipeline.

Шаг 1. Инициализация

На первом шаге процесса выполнения правил утверждений модуль утверждений принимает входящие утверждения, добавляя их сначала во входной набор утверждений. Входной набор утверждений аналогичен кэшу в памяти, используемому для временного хранения данных только до тех пор, пока процессу не потребуется извлечь их. Данные входного набора утверждений удаляются после завершения выполнения правил.

Добавление утверждения во входной набор утверждений для набора правил

Входной набор утверждений создается модулем утверждений, когда ему требуется временно сохранить данные утверждений в памяти, пока он обрабатывает логику, связанную с набором правил утверждений. Модуль утверждений копирует все входящие утверждения во входной набор утверждений, откуда его может извлечь первое правило из набора правил.

Например, на рисунке ниже модуль утверждений считывает входящие утверждения A и B и копирует их во входной набор утверждений. После этого модуль утверждений извлекает и обрабатывает утверждения A и B в качестве входных данных для логики первого правила из набора правил утверждений.

Illustration that shows that the claims engine reads the claims of A and B from the incoming claims and copies them to the input claim set.

Все правила в наборе правил утверждений используют один и тот же входной набор утверждений. Каждое правило в этом наборе может добавлять данные к общему входному набору утверждений, влияя таким образом на работу последующих правил в наборе.

Шаг 2. Выполнение

На этом шаге процесса правила утверждений обрабатываются по мере того, как модуль утверждений по очереди перебирает все правила в определенном наборе правил в хронологическом порядке. Каждое правило в наборе правил выполняется только один раз и выполняется в том порядке, в котором они отображаются сверху вниз, как показано в диалоговом окне "Изменение правил утверждений" в оснастке управления AD FS. Первым выполняется самое верхнее правило утверждения из набора правил, затем выполняются последующие правила, пока они не будут обработаны все.

Согласно языку правил утверждений, правило утверждения состоит из двух частей: условия и инструкции выдачи. Обработчик утверждений сначала обрабатывает часть условия с помощью данных в входном наборе утверждений, чтобы определить, имеет ли условие, указанное в правиле, имеет значение true для утверждений, содержащихся в входном наборе утверждений (утверждения, соответствующие условию правила, называются соответствующими утверждениями). Если найдены соответствующие утверждения, модуль утверждений выполняет инструкцию выдачи правила для каждого набора соответствующих утверждений. Инструкция выдачи правила может выполнять одно из следующих действий с соответствующими утверждениями:

  1. копировать соответствующее утверждение в выходной набор утверждений;

  2. преобразовывать поля утверждений и создавать новое утверждение либо только во входном наборе утверждений, либо как во входном, так и в выходном наборах;

  3. использовать соответствующие утверждения в качестве ключа для поиска дополнительной информации в хранилище атрибутов с целью создания новых утверждений либо только во входном наборе утверждений, либо как во входном, так и в выходном наборах.

Добавление утверждения в выходной набор утверждений для набора правил

Выходной набор утверждений — это область памяти, которая изначально пуста. Она важна, так как модуль утверждений вернет только те утверждения, которые будут находиться в выходном наборе утверждений по завершении обработки. Это означает, что любые утверждения, которые имеются только во входном наборе утверждений, но не в выходном, будут игнорироваться при формировании итогового набора исходящих утверждений.

Добавление утверждения в оба набора утверждений для набора правил

Как правило, утверждения добавляются в входной набор утверждений или в наборе входных утверждений и в наборе выходных утверждений на основе инструкции выдачи правила. В языке правил утверждений эти инструкции называются add или issue.

Если используется инструкция add, утверждения добавляются только во входной набор утверждений и будут существовать только в целях выполнения. По завершении выполнения они будут удалены. Если используется инструкция issue, утверждения добавляются как во входной, так и в выходной наборы утверждений и будут возвращены в выходном наборе утверждений по завершении выполнения. Подробнее об этих инструкциях см. в разделе The Role of the Claim Rule Language.

Если условию правила из набора правил не соответствует ни одно утверждение из входного набора утверждений, инструкция выдачи игнорируется. Таким образом утверждения не добавляются ни в выходной, ни во входной наборы утверждений. На приведенном ниже рисунке показано, что происходит, когда модуль утверждений выполняет правило преобразования.

Illustration that shows what happens when the claims engine executes a transform rule.

  1. Входящие утверждения добавляются во входной набор утверждений модулем утверждений.

  2. Когда выполняется первое правило, оно видит утверждения A и B, которые на этот момент являются единственными утверждениями во входном наборе утверждений, и обрабатывает условие, содержащееся в логике правила 1.

  3. Так как утверждение A имеется во входном наборе утверждений, условие правила считается выполненным (утверждение A соответствует ему), и новое утверждение C добавляется как во входной, так и выходной наборы утверждений.

  4. Теперь правило 2 может использовать утверждения A, B и C (все утверждения во входном наборе утверждений) в качестве входных данных для обработки логики.

Подробнее о преобразовании утверждений см. в разделе When to Use a Transform Claim Rule.

Шаг 3. Результат выполнения

Последний этап выполнения набора правил утверждений начинается, как только все правила из определенного набора правил будут выполнены и в выходном наборе утверждений будет содержаться итоговый набор утверждений. На этом этапе модуль утверждений возвращает контекст выходного набора утверждений в качестве результата выполнения набора правил. С этого момента за дальнейшую обработку этих итоговых данных отвечает конвейер утверждений.

Отправка результатов выполнения в конвейер утверждений

Когда модуль утверждений обрабатывает набор правил, этому набору выделяется в памяти собственная область для входного и выходного набора утверждений. Это означает, что входной и выходной наборы утверждений, используемые одним набором правил, изолированы от входного и выходного наборов, используемых другим набором правил.

После того как процесс выполнения (шаги 1, 2 и 3) для определенного набора правил полностью завершится, выданные исходящие утверждения (содержимое выходного набора утверждений) будут использоваться в качестве входных данных для следующего набора правил в конвейере утверждений. Это обеспечивает передачу утверждений из одного набора правил в другой, как показано на рисунке ниже.

AD FS roles

Примечание.

Хотя набор правил выдачи также является важным этапом работы конвейера, на приведенном выше рисунке он показан не только для простоты. Иллюстрацию того, какое место набор правил выдачи занимает в конвейере утверждений, см. в разделе The Role of the Claims Pipeline.

В этом случае выходные данные правил принятия используются конвейером для передачи итогового набора утверждений, сформированного правилами принятия, на второй этап конвейера, где осуществляется обработка правил авторизации. На этом этапе весь процесс выполнения правил утверждений (шаги 1, 2 и 3) повторяется для набора правил авторизации. Этот цикл продолжается до тех пор, пока не будет выполнен набор правил выдачи (последний этап работы конвейера).

После того как итоговые исходящие утверждения возвращаются модулем для набора правил выдачи, они упаковываются в токен SAML, который служба федерации отправляет клиенту.

Обработка правил авторизации

Если набор правил утверждений, выполняемый на шаге 2 процесса выполнения правил утверждений, состоит из правил авторизации (которые имеют разные наборы утверждений ввода и вывода, отличные от правил принятия или выдачи), эти правила авторизации будут выполняться, чтобы определить, разрешен ли запрашивающий маркер маркера для заданной проверяющей стороны из службы федерации на основе утверждений запрашивающего.

Целью правил авторизации является выдача разрешающего или запрещающего утверждения в зависимости от того, следует ли разрешить пользователю получить токен для данной проверяющей стороны или нет. Как показано на рисунке ниже, выходные данные правил авторизации используются конвейером для определения того, должен ли выполняться набор правил выдачи, в зависимости от наличия или отсутствия разрешающего или запрещающего утверждения. Однако эти выходные данные не используются как входные для набора правил утверждений.

Illustration that shows the output of the authorization execution is used by the pipeline to determine whether the issuance rule set is executed or not.

Подробнее об авторизации утверждений см. в разделе When to Use an Authorization Claim Rule.