カスタム クレーム ルールをいつ使うべきか
Active Directory フェデレーション サービス (AD FS) 2.0 では、クレーム ルール言語を使用してカスタム クレーム ルールを記述します。この言語は、クレーム発行エンジンがクレームをプログラムによって生成、変換、パス スルー、およびフィルター処理するために使用するフレームワークです。カスタム ルールを使用することで、標準のルール テンプレートよりも複雑なロジックを含むルールを作成できます。以下の場合には、カスタム ルールの使用を検討してください。
SQL (構造化照会言語) 属性ストアから抽出された値に基づいてクレームを送信する場合。
カスタムのライトウェイト ディレクトリ アクセス プロトコル (LDAP) フィルターを使用して LDAP 属性ストアから抽出された値に基づいて、クレームを送信する場合。
カスタム属性ストアから抽出された値に基づいてクレームを送信する場合。
受信クレームが 2 つ以上存在する場合にのみクレームを送信する場合。
受信クレームの値が複合パターンと一致する場合にのみクレームを送信する場合。
受信クレームの値に複雑な変更を加えたクレームを送信する場合。
今後のルールでのみ使用するクレームを作成し、実際にはクレームを送信しない場合。
複数の受信クレームのコンテンツから送信クレームを構築する場合。
カスタム ルールは、受信クレームの値に基づいて送信クレームのクレーム値を生成する必要がある場合にも使用できますが、その場合はルールに追加のコンテンツを含める必要があります。
クレーム ルール言語は、ルール ベースです。この言語は、条件部分と実行部分で構成されます。クレーム ルール言語の構文を使用することにより、組織のニーズに応じてクレームを列挙、追加、削除、または変更できます。この各部分がどのように機能するかの詳細については、「クレーム ルール言語の役割」 を参照してください。
次のセクションでは、クレーム ルールの基本事項について説明します。また、いつカスタム クレーム ルールを使用するかについても詳しく説明します。
クレーム ルールについて
クレーム ルールは、受信クレームを取得し、それに条件を適用し (x の場合は y を実行、という形式)、条件パラメーターに基づいて送信クレームを生成するというビジネス ロジックのインスタンスを表します。
AD FS 2.0 管理スナップインでクレーム ルールを作成するには、クレーム ルール テンプレートを使用する必要があります。
クレーム ルールは、クレーム プロバイダー (Active Directory または別のフェデレーション サービスなど) から直接送信された受信クレームを処理するか、クレーム プロバイダーの信頼に関する受け入れ変換ルールの出力から得られる受信クレームを処理します。
クレーム ルールは、1 つのルール セット内で古い順に、クレーム発行エンジンによって処理されます。ルールに優先順位を設定することで、指定されたルール セット内で先行するルールによって生成されたクレームをさらに絞り込んだり、フィルター処理することができます。
クレーム ルール テンプレートでは、常に受信クレームの種類を指定する必要があります。ただし、クレームの種類が同じ複数のクレーム値を 1 つのルールで処理できます。
クレーム ルールおよびクレーム ルール セットの詳細については、「クレーム ルールの役割」を参照してください。ルールの処理の詳細については、「クレーム エンジンの役割」を参照してください。クレーム ルール セットの処理方法の詳細については、「クレーム パイプラインの役割」を参照してください。
このルールの作成方法
このルールを作成するには、まず、クレーム ルール言語を使用して操作に必要な構文を記述します。次に、AD FS 2.0 管理スナップインで、クレーム プロバイダーの信頼または証明書利用者の信頼のプロパティを開き、[Send a Claims Using a Custom Rule] テンプレートのテキスト ボックスに、その結果を貼り付けます。
このルール テンプレートには、以下のオプションがあります。
クレーム ルール名を指定する
AD FS 2.0 のクレーム ルール言語を使用して、1 つまたは複数のオプションの条件および発行ステートメントを入力する
このテンプレートを使用してカスタム ルールを作成する方法の詳細については、「AD FS 2.0 展開ガイド」の「カスタム ルールを使用してクレームを送信するルールを作成する」(英語) を参照してください。
クレーム ルール言語の機能について詳しく知るには、スナップイン内に既に存在している他のルールのプロパティで [View Rule Language] タブをクリックして、クレーム ルール言語の構文を表示します。このセクションの説明とこのタブの構文情報を参考にして、独自のカスタム ルールの構築方法についての理解を深めてください。
クレーム ルール言語の詳細については、「クレーム ルール言語の役割」を参照してください。
クレーム ルール言語を使用する
例: ユーザーの名前属性値に基づいて名前と姓を組み合わせる方法
次のルール構文は、指定された属性ストア内の属性値に含まれる名前と姓を組み合わせます。ポリシー エンジンは、各条件が一致するデカルト積を生成します。たとえば、名前 {“Frank”, “Alan”} と姓 {“Miller”, “Shen”} の出力は、{“Frank Miller”, “Frank Shen”, “Alan Miller”, “Alan Shen”} となります。
c1:[type == "http://exampleschema/firstname" ] && c2:[type == "http://exampleschema/lastname",] => issue(type = "http://exampleschema/name", value = c1.value + “ “ + c2.value);
例: ユーザーに部下がいるかどうかに基づいてマネージャー クレームを発行する方法
次のルールは、ユーザーに部下がいる場合にのみ、マネージャー クレームを発行します。
c:[type == "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] => add(store = "SQL Store", types = ("https://schemas.xmlsoap.org/claims/Reports"), query = "SELECT Reports FROM dbo.DirectReports WHERE UserName = {0}", param = c.value ); count([type == “https://schemas.xmlsoap.org/claims/Reports“] ) > 0 => issue(= "https://schemas.xmlsoap.org/claims/ismanager", value = "true");
例: LDAP 属性に基づいて PPID クレームを発行する方法
次のルールは、LDAP 属性ストアのユーザーの windowsaccountname および originalissuer 属性に基づいて、PPID (Private Personal Identifier) クレームを発行します。
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"] => issue(store = "_OpaqueIdStore", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"), query = "{0};{1};{2}", param = "ppid", param = c.Value, param = c.OriginalIssuer);
このクエリでユーザーを一意に識別するために使用できる一般的な属性としては、以下の属性があります。
user SID
windowsaccountname
samaccountname