クレーム エンジンの役割

Active Directory フェデレーション サービス (AD FS) 2.0 のクレーム エンジンを一言で表すと、フェデレーション サービスに対するクレーム要求を提供および処理するために専用に使用されるルール ベースのエンジンです。クレーム エンジンは、設定されたすべてのフェデレーション信頼関係に対する各ルール セットの実行と、クレーム パイプラインへの出力結果の送信を単独で行う、フェデレーション サービス内のエンティティです。

クレーム パイプラインはクレームの流れのエンド ツー エンド プロセスに関する、やや論理的な概念です。それに対してクレーム ルールは実際の管理要素であり、これを使用することによってクレーム ルール実行プロセス中のクレームの流れをカスタマイズできます。パイプライン プロセスの詳細については、「クレーム エンジンの役割」を参照してください。

次の図に示すように、組織内のすべてのフェデレーション信頼関係に対してクレーム ルールを使用することにより、受信クレームを受け入れ (受け入れルール)、クレーム要求者を承認し (承認ルール)、送信クレームを発行する (発行ルール) 処理がクレーム エンジンによって実行されます。

クレーム パイプライン プロセス

クレーム ルールを使用して組織内のクレーム プロバイダーの信頼または証明書利用者の信頼を構成する場合、その信頼に関するクレーム ルール セットは受信クレームのゲートキーパーとして機能します。具体的には、クレーム エンジンを呼び出してクレーム ルール内の必要なロジックを適用し、クレームを発行するかどうか、また、どのクレームを発行するかを決定します。

次のセクションでは、クレーム ルールの実行プロセスを通して、エンジンによって行われるクレーム処理の各ステップについて概要を説明します。以下で説明する各ステップは、クレーム パイプライン プロセスで説明されているステージごとに発生します。プロセスは、次のステップから構成されています。

  • ステップ 1: 初期化

  • ステップ 2: 実行

  • ステップ 3: 実行結果

パイプライン プロセスの詳細については、「クレーム エンジンの役割」を参照してください。

クレーム ルール実行プロセスの最初のステップでは、クレーム エンジンが受信クレームを入力クレーム セットに追加することにより、受信クレームを受け入れます。入力クレーム セットはメモリのキャッシュに似ており、必要なプロセスにおいてデータの取得が必要となる間だけ一時的にデータを格納します。入力クレーム セットのデータは、ルールの実行が完了すると破棄されます。

入力クレーム セットは、あるクレーム ルール セットに関連付けられたロジックの処理時に、クレーム データをメモリに一時的に保存しておく必要がある場合に、クレーム エンジンによって作成されます。クレーム エンジンによってすべての受信クレームが入力クレーム セットにコピーされ、そこからルール セットの最初のルールが受信クレームを取得します。

たとえば、下の図のクレーム エンジンは、受信クレームからクレーム A および B を読み取り、入力クレーム セットにコピーします。入力クレーム セットにクレームが追加されると、クレーム エンジンは、クレーム ルール セット内の最初のルール ロジックの入力として、クレーム A および B を取得して処理します。

クレーム ルール セット内のすべてのルールは、同じ入力クレーム セットを共有します。クレーム ルール セット内の各ルールは共有の入力クレーム セットにクレームを追加することができ、セット内のすべての後続のルールが影響を受けます。

クレーム ルール プロセスのこのステップでは、クレーム ルールが処理されます。このときクレーム エンジンは、特定のルール セット内のすべてのルールを 1 つずつ古い順に処理します。ルール セット内の各ルールは、AD FS 2.0 管理スナップインの [Edit Claim Rules] ダイアログ ボックスに表示される順に、上から下へ 1 つずつ、それぞれ 1 回だけ実行されます。ルール セットの一番上にあるクレーム ルールが最初に処理された後、すべてのルールが実行されるまで、後続のルールが順番に処理されます。

クレーム ルール言語で定義されているとおり、クレーム ルールは、条件と発行ステートメントの 2 つの部分で構成されます。クレーム エンジンは、まず入力クレーム セットのデータを使用して条件部分を処理し、ルール内で指定されている条件が入力クレーム セットに含まれるクレームに当てはまるかどうかを判定します (ルールの条件を満たすクレームを一致クレームといいます)。一致クレームが見つかると、クレーム エンジンは、一致クレームのセットに対してルールの発行ステートメントを実行します。ルールの発行ステートメントは、一致クレームを使用して、以下のタスクのいずれかを実行できます。

  1. 一致クレームを出力クレーム セットにコピーする。

  2. クレームの各フィールドを変換して、入力クレーム セットだけ、または評価クレーム セットと出力クレーム セットの両方に新しいクレームを作成する。

  3. 一致クレームをキーとして使用して属性ストアから詳細な情報を参照し、入力クレーム セットだけ、または入力クレーム セットと出力クレーム セットの両方に新しいクレームを作成する。

出力クレーム セットはメモリ内の場所で、最初は何も含まれていませんが、実行プロセスが完了するとクレーム エンジンは出力クレーム セットに存在するクレームだけを返すため、重要な存在です。つまり、最終的な送信クレームのセットを計算する段階になると、入力クレーム セットだけに存在して出力クレーム セットに存在しないクレームは無視されます。

ルールが処理される際、クレームは、ルールの発行ステートメントで使用されているステートメントに基づいて、入力クレーム セットだけ、または入力クレーム セットと出力クレーム セットの両方に追加されます。クレーム ルール言語では、これらのステートメントを add または issue と呼びます。

add ステートメントを使用する場合、クレームは、入力クレーム セットだけに追加されます。クレームは実行のみを目的として存在し、実行が完了すると失われます。issue ステートメントを使用する場合、クレームは入力クレーム セットと出力クレーム セットの両方に追加され、実行が完了すると、出力クレーム セットに返されます。これらのステートメントの詳細については、「クレーム ルール言語の役割」を参照してください。

ルール セット内のルールの条件部分が入力クレーム セット内のいずれのクレームとも一致しない場合、ルールの発行ステートメント部分は無視されます。したがって、出力クレーム セットにも入力クレーム セットにもクレームは追加されません。次の図と対応する各ステップで、クレーム エンジンが変換ルールを実行する際の手順を説明します。

  1. クレーム エンジンによって受信クレームが入力クレーム セットに追加されます。

  2. 最初のルールが実行されると、クレーム A および B が調べられ、ルール 1 のルール ロジックの条件部分が処理されます。この時点では、この 2 つのクレームだけが入力クレーム セットに格納されています。

  3. クレーム A が入力クレーム セットに存在するため、ルールの条件は true (クレーム A と一致) と判定され、新しいクレーム C が入力クレーム セットと出力クレーム セットの両方に追加されます。

  4. これで、ルール 2 は、ロジックを処理するための入力としてクレーム A、B、C (入力クレーム セット内にあるすべてのクレーム) を使用できます。

クレーム変換の詳細については、「クレーム変換ルールを使用する場合」を参照してください。

クレーム ルール セット実行の最終段階は、特定のルール セット内のすべてのルールが実行され、最終的なクレーム セットが出力クレーム セットに格納された時点で開始されます。この時点で、クレーム エンジンは、出力クレーム セットの内容をルール セット実行の出力として返します。この時点以降は、クレーム パイプラインがこの最終的な出力を受け取り、プロセスの次のステージに送ります。

クレーム エンジンがルール セットを処理する際、そのルール セットの入力および出力クレーム セット用として、メモリ内に専用の場所が用意されます。つまり、あるルール セットによって使用される入力/出力クレーム セットは、別のルール セットの入力/出力クレーム セットとは切り離されています。

特定のルール セットのプロセス全体 (ステップ 1 ~ 3) の実行が完了すると、新たに発行された送信クレーム (出力クレーム セットの内容) は、クレーム パイプライン内の次のルール セットの入力として使用されます。これにより、次の図のように、クレームを 1 つのルール セットの出力から別のルール セットの入力へと送ることができます。

発行ルール セットもパイプラインにおける重要なプロセスですが、上の図では簡略化のために示されていません。発行ルール セットとクレーム パイプライン内でのその動作を示す図については、「クレーム パイプラインの役割」を参照してください。

この図の例では、パイプラインは受け入れルールの出力を使用して、受け入れルールによって生成された最終的なクレーム セットを、承認ルールの処理を行う第 2 ステージに送っています。この時点で、クレーム ルール実行プロセス (前述のステップ 1 ~ 3) が承認ルール セットに対しても再度実行されます。このサイクルは、発行ルール セット (パイプラインの最終ステージ) が完了するまで続きます。

完成した送信クレームは、発行ルール セットのエンジンから返されると SAML トークンにパッケージ化され、そのトークンがフェデレーション サービスによってクライアントに送り返されます。

クレーム ルール実行プロセスのステップ 2 で実行されるクレーム ルール セットが承認ルール (受け入れルールや発行ルールとは異なる入力および出力クレーム セットを持つ) で構成されている場合、承認ルールが実行されると、トークンの要求者が特定の証明書利用者のセキュリティ トークンをフェデレーション サービスから取得することを承認されるかどうかが要求者のクレームに基づいて決定されます。

承認ルールの目的は、ユーザーが特定の証明書利用者に対するトークンの取得を許可されるかどうかに基づいて、許可または拒否クレームを発行することにあります。次の図に示すように、パイプラインは、承認実行の出力を使用し、許可/拒否クレームの存在に基づいて、発行ルール セットを実行するかどうかを決定します。ただし、承認実行の出力自体は、クレーム ルール セットへの入力として使用されません。

クレーム承認の詳細については、「承認クレーム ルールを使用する場合」を参照してください。