要求エンジンの役割
Active Directory Federation Services (AD FS) の要求エンジンを一言で表すと、フェデレーション サービスに対する要求リクエストを提供および処理するために専用に使用される規則ベースのエンジンです。 要求エンジンは、構成されたすべてのフェデレーション信頼関係に対する各規則セットの実行と、要求パイプラインへの出力結果の送信を単独で行う、フェデレーション サービス内のエンティティです。
要求パイプラインは、要求を渡すためのエンド ツー エンド プロセスのより論理的な概念です。これに対し、要求規則は、要求規則実行プロセス中の要求の流れをカスタマイズするために使用できる、実際の管理要素です。 パイプライン プロセスの詳細については、「 The Role of the Claims Pipeline」を参照してください。
次の図に示すように、組織内のすべてのフェデレーション信頼関係に対して要求規則を使用することにより、受信要求を受け入れ (受け入れ規則)、要求要求者を承認し (承認規則)、送信要求を発行する (発行規則) 処理が要求エンジンによって実行されます。
要求規則の実行プロセス
要求規則を使用して組織内の要求プロバイダーの信頼または証明書利用者の信頼を構成する場合、その信頼に関する要求規則セットは受信要求のゲートキーパーとして機能します。具体的には、要求エンジンを呼び出して要求規則内の必要なロジックを適用し、要求を発行するかどうか、また、どの要求を発行するかを決定します。
次のセクションでは、要求規則の実行プロセスでエンジンによって行われる要求処理の各ステップについて概要を説明します。 以下で説明する各ステップは、要求パイプライン プロセスで説明されているステージごとに発生します。 その手順は次のとおりです。
ステップ 1 - 初期化
ステップ 2 - 実行
ステップ 3 - 実行結果
パイプライン プロセスの詳細については、「 The Role of the Claims Pipeline」を参照してください。
ステップ 1 - 初期化
要求規則実行プロセスの最初のステップでは、最初に要求エンジンが受信要求を入力要求セットに追加することにより、受信要求を受け入れます。 入力要求セットはメモリのキャッシュに似ており、必要なプロセスにおいてデータの取得が必要となる間だけ一時的にデータを格納します。 入力要求セットのデータは、規則の実行が完了すると破棄されます。
規則セットの入力要求セットへの要求の追加
入力要求セットは、ある要求規則セットに関連付けられたロジックを処理するときに要求データをメモリに一時的に保存しておく必要がある場合に、要求エンジンによって作成されます。 要求エンジンによってすべての受信要求が入力要求セットにコピーされ、そこから規則セットの最初の規則が受信要求を取得します。
たとえば、下の図の要求エンジンは、受信要求から要求 A および B を読み取り、入力要求セットにコピーします。 入力要求セットに要求が追加されると、要求エンジンは、要求規則セット内の最初の規則のロジックの入力として、要求 A および B を取得して処理します。
要求規則セット内のすべての規則は、同じ入力要求セットを共有します。 要求規則セット内の各規則は共有の入力要求セットに要求を追加することができ、セット内のすべての後続の規則が影響を受けます。
ステップ 2 - 実行
要求規則プロセスのこのステップでは、要求規則が処理されます。このとき要求エンジンは、特定の規則セット内のすべての規則を 1 つずつ古い順に処理します。 規則セット内の各規則は、AD FS 管理スナップインの [要求規則の編集] ダイアログ ボックスに表示される順に、上から下へ 1 つずつ、それぞれ 1 回だけ実行されます。 規則セットの一番上にある要求規則が最初に処理された後、すべての規則が実行されるまで、後続の規則が順番に処理されます。
要求規則言語で定義されているとおり、要求規則は、条件と発行ステートメントの 2 つの部分で構成されます。 要求エンジンは、まず入力要求セットのデータを使用して条件部分を処理し、規則内で指定されている条件が入力要求セットに含まれる要求に当てはまるかどうかを判定します (規則の条件を満たす要求を一致要求といいます)。 一致要求が見つかると、要求エンジンは、一致要求の各セットに対して規則の発行ステートメントを実行します。 規則の発行ステートメントは、一致要求を使用して、以下のタスクのいずれかを実行できます。
一致要求を出力要求セットにコピーする。
要求の各フィールドを変換して、入力要求セットだけ、または評価要求セットと出力要求セットの両方に新しい要求を作成する。
一致要求をキーとして使用して属性ストアから詳細な情報を参照し、入力要求セットだけ、または入力要求セットと出力要求セットの両方に新しい要求を作成する。
規則セットの出力要求セットへの要求の追加
出力要求セットはメモリ内の場所で、最初は何も含まれていませんが、実行プロセスが完了すると要求エンジンは出力要求セットに存在する要求だけを返すため、重要な存在です。 つまり、最終的な送信要求のセットを計算する段階になると、入力要求セットだけに存在して出力要求セットに存在しない要求は無視されます。
規則セットの両方の要求セットへの要求の追加
規則が処理される際、要求は、規則の発行ステートメントで使用されているステートメントに基づいて、入力要求セットだけ、または入力要求セットと出力要求セットの両方に追加されます。 要求規則言語では、これらのステートメントを add または issue と呼びます。
add ステートメントを使用する場合、要求は、入力要求セットだけに追加されます。要求は実行のみを目的として存在し、実行が完了すると失われます。 issue ステートメントを使用する場合、要求は入力要求セットと出力要求セットの両方に追加され、実行が完了すると、出力要求セットに返されます。 これらのステートメントの詳細については、次を参照してください。 要求規則言語の役割します。
規則セット内の規則の条件部分が入力要求セット内のいずれの要求とも一致しない場合、規則の発行ステートメント部分は無視されます。したがって、出力要求セットにも入力要求セットにも要求は追加されません。 次の図と対応する各ステップで、要求エンジンが変換規則を実行する際の手順を説明します。
要求エンジンによって受信要求が入力要求セットに追加されます。
最初の規則が実行されると、要求 A および B が調べられ (この時点では、この 2 つの要求だけが入力要求セットに格納されています)、規則 1 の規則ロジックの条件部分が処理されます。
要求 A が入力要求セットに存在するため、規則の条件は true (要求 A と一致) と判定され、新しい要求 C が入力要求セットと出力要求セットの両方に追加されます。
これで、規則 2 は、ロジックを処理するための入力として要求 A、B、C (入力要求セット内にあるすべての要求) を使用できます。
要求変換の詳細については、「 When to Use a Transform Claim Rule」を参照してください。
ステップ 3 - 実行結果
要求規則セットの実行の最終ステージは、特定の規則セット内のすべての規則が実行され、最終的な要求セットが出力要求セットに格納された時点で開始されます。 この時点で、要求エンジンは、出力要求セットのコンテキストを規則セット実行の出力として返します。 この時点以降は、要求パイプラインがこの最終的な出力を受け取り、プロセスの次のステージに送ります。
要求パイプラインへの実行の出力の送信
要求エンジンが規則セットを処理する際、その規則セットの入力および出力要求セット用として、メモリ内に専用の場所が用意されます。 つまり、ある規則セットによって使用される入力/出力要求セットは、別の規則セットの入力/出力要求セットとは切り離されています。
特定の規則セットのプロセス全体 (ステップ 1 ~ 3) の実行が完了すると、新たに発行された送信要求 (出力要求セットの内容) は、要求パイプライン内の次の規則セットの入力として使用されます。 これにより、次の図のように、要求を 1 つの規則セットの出力から別の規則セットの入力へと送ることができます。
Note
発行規則セットもパイプラインにおける重要なステージですが、上の図では簡略化のために示されていません。 発行のルール セットおよび要求パイプラインに組み込む方法を示す図解は、次を参照してください。 要求パイプラインの役割します。
このケースでは、パイプラインは受け入れ規則の出力を使用して、受け入れ規則によって生成された最終的な要求セットを、承認規則の処理を行うパイプラインの第 2 ステージに送っています。 この時点で、要求規則実行プロセス全体 (前のステップ 1 ~ 3) が承認規則セットに対しても再度実行されます。 このサイクルは、発行規則セット (パイプラインの最終ステージ) が完了するまで続きます。
完成した送信要求は、発行規則セットのエンジンから返されると SAML トークンにパッケージ化され、そのトークンがフェデレーション サービスによってクライアントに送り返されます。
承認規則の処理
要求規則実行プロセスのステップ 2 で実行される要求規則セットが (受け入れ規則や発行規則とは異なる入力および出力要求セットを持つ) 承認規則で構成されている場合、承認規則が実行されると、トークンの要求者が特定の証明書利用者のセキュリティ トークンをフェデレーション サービスから取得することを承認されるかどうかが要求者の要求に基づいて決定されます。
承認規則の目的は、ユーザーが特定の証明書利用者に対するトークンの取得を許可されるかどうかに基づいて、許可または拒否要求を発行することにあります。 次の図に示すように、パイプラインは、承認実行の出力を使用し、許可または拒否要求の存在に基づいて、発行規則セットを実行するかどうかを決定します。ただし、承認実行の出力自体は、要求規則セットへの入力として使用されません。
要求承認の詳細については、「 When to Use an Authorization Claim Rule」を参照してください。