"LDAP 属性を要求として送信" 規則を使用するタイミング
属性ストアに存在する実際のライトウェイト ディレクトリ アクセス プロトコル (LDAP) 属性値を含む出力方向の要求を発行するときに、Active Directory フェデレーション サービス (AD FS) でこの規則を使用すると、要求の種類を各 LDAP 属性に関連付けることができます。 属性ストアの詳細については、「属性ストアの役割」を参照してください。
この規則を使用すると、次の表で説明するように、指定した各 LDAP 属性に対して、規則のロジックに一致する場合に要求が発行されます。
規則のオプション | 規則のロジック |
---|---|
出力方向の要求の種類に LDAP 属性をマップする | 属性ストアが指定した属性ストアと等しく、LDAP 属性が指定した値と等しい場合、その LDAP 属性値を指定した出力方向の要求の種類にマップし、要求を発行します。 |
以下のセクションでは、要求規則の基本的な概要を説明します。 "LDAP 属性を要求として送信" 規則を使用するタイミングについても詳しく説明します。
要求規則について
要求規則は、入力方向の要求を受け取り、条件 (x の場合に y を実行) を適用して、条件のパラメーターに基づいて出力方向の要求を生成するビジネス ロジックのインスタンスを表します。 次の一覧に、このトピックを読む前に理解しておく必要のある、要求規則に関する重要なヒントを示します。
AD FS 管理スナップインで要求規則を作成するには、要求規則テンプレートを使用する必要があります。
要求規則は、要求プロバイダー (Active Directory、別のフェデレーション サービスなど) から直接、または要求プロバイダー信頼の受付変換規則の出力から、入力方向の要求を処理します。
要求規則は、要求発行エンジンによって、特定の規則セット内で時系列に従って処理されます。 規則に優先順位を設定すると、特定の規則セット内の先行する規則で生成された要求をさらに調整またはフィルター処理できます。
要求規則テンプレートでは、常に入力方向の要求の種類を指定する必要があります。 ただし、1 つの規則を使用して、要求の種類が同じ複数の要求の値を処理できます。
要求規則および要求規則セットの詳細については、「要求規則の役割」をご覧ください。 規則を処理する方法の詳細については、「要求エンジンの役割」をご覧ください。 要求規則セットを処理する方法の詳細については、「要求パイプラインの役割」をご覧ください。
出力方向の要求の種類に LDAP 属性をマップする
"LDAP 属性を要求として送信" 規則テンプレートを使用すると、Active Directory や Active Directory ドメイン サービス (AD DS) などの LDAP 属性ストアから、証明書利用者に要求として送信する値の属性を選択できます。 これにより、実質的に、ユーザーが定義した属性ストアから、承認に使用できる出力方向の要求のセットに各 LDAP 属性がマップされます。
このテンプレートを使用することにより、単一の規則で、複数の属性を追加して複数の要求として送信できます。 たとえば、この規則テンプレートを使用して、会社および部署の Active Directory 属性から認証済みユーザーの属性値を検索し、それらの値を 2 つの異なる出力方向の要求として送信する規則を作成できます。
また、この規則を使用して、すべてのユーザーのグループ メンバーシップを送信することもできます。 個々のグループのメンバーシップのみを送信する場合は、"グループ メンバーシップを要求として送信" 規則テンプレートを使用します。 詳細については、「 When to Use a Send Group Membership as a Claim Rule」を参照してください。
この規則の作成方法
要求規則言語を使用するか、AD FS 管理スナップインで "LDAP 属性を要求として送信" 規則テンプレートを使用することにより、この規則を作成できます。 この規則テンプレートには、次の構成オプションがあります。
要求規則名を指定する
LDAP 属性の抽出元の属性ストアを選択する
出力方向の要求の種類に LDAP 属性をマップする
この規則の作成方法の詳細については、「LDAP 属性を要求として送信する規則を作成する」を参照してください。
要求規則言語の使用
Active Directory、AD DS、または Active Directory ライトウェイト ディレクトリ サービス (AD LDS) に対するクエリで、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 = ("http://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 == " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress ", Issuer == "AD AUTHORITY"]
=> issue(store = "AD LDS ", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/title","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "mail={0};title;displayname", param = c.Value);
次の例は、mail と title でユーザーを検索し、ユーザーの displayname 属性を使用して表示名の要求を発行する方法を示しています。
c1:[Type == " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] && c2:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/title"]
=> issue(store = "AD LDS ", types = ("http://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 属性を返す方法を示しています。
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail;{1}", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);
例: 入力方向の要求の値に基づいて Active Directory 属性ストアのクエリを実行する方法
c:[Type == "http://test/name"]
=> issue(store = "Enterprise AD Attribute Store",
types = ("http://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 属性ストアではドメインの部分を使用して、接続先として適切なドメイン コントローラーを判断し、クエリを実行して属性を要求します。
例: 2 つのカスタム規則を使用し、Active Directory 内の属性からマネージャーの電子メールを抽出する方法
以下の 2 つのカスタム規則では、次に示す順序で一緒に使用します。まず、ユーザー アカウントの manager 属性について Active Directory のクエリを実行し (規則 1)、その属性を使用して、mail 属性についてマネージャーのユーザー アカウントのクエリを実行します (規則 2)。 最後に、mail 属性を "ManagerEmail" の要求として発行します。 つまり、規則 1 では Active Directory のクエリを実行し、そのクエリの結果を規則 2 に渡し、規則 2 でマネージャーの電子メール アドレスを抽出します。
たとえば、これらの規則が実行を終了すると、corp.fabrikam.com ドメイン内のユーザーに対してマネージャーの電子メール アドレスを含む要求が発行されます。
規則 1
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> add(store = "Active Directory", types = ("http://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 == "http://schemas.xmlsoap.org/claims/ManagerDistinguishedName"]
=> issue(store = "Active Directory", types = ("http://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) にある場合にのみ機能します。