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