LDAP送信属性をクレーム ルールとしていつ使うべきか

このルールを Active Directory フェデレーション サービス (AD FS) 2.0 で使用することにより、属性ストアに存在する実際の LDAP (ライトウェイト ディレクトリ アクセス プロトコル) 属性値を含む送信クレームを発行し、クレームの種類を各 LDAP 属性に関連付けることができます。属性ストアの詳細については、「属性ストアの役割」を参照してください。

このルールを使用する場合は、指定する各 LDAP 属性向けに、次の表に示すルール ロジックに適合するクレームを発行します。

ルール オプション ルール ロジック
発信クレームタイプに LDAP 属性を割り当てる 属性ストアが指定された属性ストアに等しく、LDAP 属性が指定された値に等しい場合は、LDAP 属性値を指定された送信クレームの種類にマップしてクレームを発行する。

次のセクションでは、クレーム ルールの基本事項について説明します。また、Send LDAP Attributes as Claims ルールを使用する場合の詳細についても説明します。

クレーム ルールについて

クレーム ルールは、受信クレームを取得し、それに条件を適用し (x の場合は y を実行、という形式)、条件パラメーターに基づいて送信クレームを生成するというビジネス ロジックのインスタンスを表します。このトピックを読み進める前に、クレーム ルールについて、以下の重要事項を確認しておいてください。

  • AD FS 2.0 管理スナップインでクレーム ルールを作成するには、クレーム ルール テンプレートを使用する必要があります。

  • クレーム ルールは、クレーム プロバイダー (Active Directory または別のフェデレーション サービスなど) から直接送信された受信クレームを処理するか、クレーム プロバイダーの信頼に関する受け入れ変換ルールの出力から得られる受信クレームを処理します。

  • クレーム ルールは、1 つのルール セット内で古い順に、クレーム発行エンジンによって処理されます。ルールに優先順位を設定することで、指定されたルール セット内で先行するルールによって生成されたクレームをさらに絞り込んだり、フィルター処理することができます。

  • クレーム ルール テンプレートでは、常に受信クレーム タイプを指定する必要があります。ただし、クレームの種類が同じ複数のクレーム値は 1 つのルールで処理できます。

クレーム ルールおよびクレーム ルール セットの詳細については、「クレーム ルールの役割」を参照してください。ルールの処理方法の詳細については、「クレーム エンジンの役割」 を参照してください。クレーム ルール セットの処理方法の詳細については、「クレーム パイプラインの役割」を参照してください。

発信クレームタイプに LDAP 属性を割り当てる

Send LDAP Attributes as Claims ルール テンプレートを使用する場合は、Active Directory または Active Directory ドメイン サービス (AD DS) などの LDAP 属性ストアから属性を選択し、それらの属性の値をクレームとして証明書利用者に送信できます。これにより、ユーザーが定義する属性ストアから、承認に使用できる送信クレームのセットに、LDAP 属性が確実にマップされます。

このテンプレートを使用すると、複数のクレームとして送信される複数の属性を単一のルールによって追加できます。たとえば、このルール テンプレートを使用して、企業と部門の Active Directory 属性から認証されたユーザーの属性値を検索し、これらの属性値を 2 つの別の送信クレームとして送信するルールを作成できます。

このルールを使用して、すべてのユーザーのグループ メンバーシップを送信することもできます。個々のグループ メンバーシップのみを送信する場合は、Send Group Membership as a Claim ルール テンプレートを使用します。詳細については、「Send Group Membership as a Claim のルールを使用する場合」を参照してください。

このルールの作成方法

このルールを作成するには、クレーム ルール言語を使用するか、または AD FS 2.0 管理スナップインの Send LDAP Attributes as Claims ルール テンプレートを使用します。このルール テンプレートには、以下の構成オプションがあります。

  • クレーム ルール名を指定する

  • LDAP 属性の抽出元の属性ストアを選択する

  • 発信クレームタイプに LDAP 属性を割り当てる

このルールの作成方法の詳細については、「LDAP 属性をクレームとして送信するためのルールを作成する」(英語) を参照してください。

クレーム ルール言語を使用する

Active Directory、AD DS、または AD LDS (Active Directory Lightweight Directory Services) へのクエリ結果を samAccountname 以外の LDAP 属性と比較する必要がある場合は、カスタム ルールを使用する必要があります。Windows アカウント名クレームが入力セットに存在しない場合も、カスタム ルールを使用して、AD DS または AD LDS のクエリに使用するクレームを指定する必要があります。

属性ストアのデータをクエリして抽出するためにクレーム ルール言語を使用してカスタム ルールを作成するさまざまな方法のうち、いくつかを次の例で説明します。

例: AD LDS 属性ストアをクエリして、指定された値を返す方法
パラメーターはセミコロンで区切る必要があります。最初のパラメーターは LDAP フィルターです。その後の各パラメーターは、一致するオブジェクトがあった場合に返される属性です。

sAMAccountName 属性でユーザーを検索し、ユーザーの mail 属性の値を使用して電子メール アドレス クレームを発行する例を次に示します。

c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "AD LDS", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"));

mail 属性でユーザーを検索し、ユーザーの title 属性と displayname 属性の値を使用してタイトル クレームと表示名クレームを発行する方法の例を次に示します。

c:[Type == " https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress ", Issuer == "AD AUTHORITY"] => issue(store = "AD LDS ", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/title","https://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "mail={0};title;displayname", param = c.Value);

mail と title でユーザーを検索し、ユーザーの displayname 属性を使用して表示名クレームを発行する方法の例を次に示します。

c1:[Type == " https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] && c2:[Type == "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/title"] => issue(store = "AD LDS ", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "(&(mail={0})(title={1}));displayname", param = c1.Value, param = c2.Value);

例: Active Directory 属性ストアをクエリして、指定された値を返す方法
Active Directory 属性ストアで正しいドメインがクエリされるためには、Active Directory のクエリは、最後のパラメーターにユーザーの名前 (ドメイン名を含む) を含む必要があります。そうでない場合は、同じ構文がサポートされます。

sAMAccountName 属性でユーザーのドメインからユーザーを検索して、mail 属性を返す方法の例を次に示します。

例: 受信クレームの値に基づいて Active Directory 属性ストアをクエリする方法

c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail;{1}", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);c:[Type == "https://test/name"] => issue(store = "Enterprise AD Attribute Store", types = ("https://test/email"), query = ";mail;{0}", param = c.Value)

上のクエリは、次の 3 つの部分で構成されています。

  • LDAP フィルター: クエリのこの部分は、属性をクエリするオブジェクトを取得するために指定します。有効な LDAP クエリに関する一般的な情報については、「RFC 2254」を参照してください。Active Directory 属性ストアをクエリする際、LDAP フィルターを指定しない場合は samAccountName={0} と見なされ、Active Directory 属性ストアでは {0} に値を指定できるパラメーターが想定されます。そうでない場合、クエリはエラーになります。Active Directory 以外の LDAP 属性ストアの場合は、クエリの LDAP フィルター部分を省略できません。省略した場合はエラーになります。

  • 属性指定: クエリのこの 2 番目の部分では、フィルター処理したオブジェクトの中から取得する属性 (複数の属性値を指定する場合は、コンマで区切ります) を指定します。指定する属性の数は、クエリで定義するクレームの種類の数と一致する必要があります。

  • Active Directory ドメイン: 属性ストアが Active Directory である場合にのみ、クエリのこの最後の部分を指定します (この部分は、他の属性ストアをクエリする場合は必要ありません)。クエリのこの部分は、domain\name という形式でユーザー アカウントを指定するために使用します。Active Directory 属性ストアは、domain 部分を使用して接続先の該当するドメイン コントローラーを特定し、クエリを実行して属性を要求します。

例: 2 つのカスタム ルールを使用して、Active Directory の属性から管理者の電子メールを抽出する方法
次の 2 つのカスタム ルールは、以下に示す順序で同時に使用します。Active Directory をクエリしてユーザー アカウントの manager 属性を取得し (ルール 1)、次にその取得した属性を使用して、mail 属性に管理者のユーザー アカウントをクエリします (ルール 2)。最後に、mail 属性を "ManagerEmail" クレームとして発行します。要約すると、ルール 1 は Active Directory をクエリしてクエリの結果をルール 2 に渡し、渡されたルール 2 は管理者 (manager) の電子メール値を抽出します。

たとえば、これらのルールが実行を完了すると、corp.fabrikam.com ドメインのユーザーに対して管理者の電子メール アドレスを含むクレームが発行されます。

ルール 1

c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"] => add(store = "Active Directory", types = ("https://schemas.xmlsoap.org/claims/ManagerDistinguishedName"), query = "sAMAccountName= {0};mail,userPrincipalName,extensionAttribute5,manager,department,extensionAttribute2,cn;{1}", param = regexreplace(c.Value, "(? <domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);

ルール 2

c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"] && c1:[Type == "https://schemas.xmlsoap.org/claims/ManagerDistinguishedName"] => issue(store = "Active Directory", types = ("https://schemas.xmlsoap.org/claims/ManagerEmail"), query = "distinguishedName={0};mail;{1}", param = c1.Value, param = regexreplace(c1.Value, ".*DC=(?<domain>.+),DC=corp,DC=fabrikam,DC=com", "${domain}\username"));

これらのルールが機能するのは、ユーザーの管理者がユーザーと同じドメイン (この例では、corp.fabrikam.com) に存在する場合だけです。

その他の参照先

属性ストア (英語)

LDAP 属性をクレームとして送信するためのルールを作成する (英語)