これを実現するには、ACS のクレーム プロバイダー信頼のクレーム ルール言語を使用して ADFS でカスタム ルールを作成します (一部の言語ドキュメントについては、こちらとこちらを参照してください)。
ただし、AD のクエリに使用されるパラメーター タイプがクレーム ルール言語で指定されていないため、一意の ID で AD をすぐに検索できるかどうかはわかりません。ルール テンプレートは Windows アカウント名 (レイアウト: DOMAIN\USERNAME
) を使用して検索するため、AD 自体の代わりに (カスタム) 属性ストアを使用し、一意の ID を Windows アカウント名にマップすることをお勧めします。
属性ストアが設定されていると仮定すると、Windows アカウント名クレームを設定するカスタム ルールを作成し、ADFS のテンプレート ルールを使用して AD にクエリを実行できるようになります。
カスタム ルールは次のようになります。
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]
=> add(store = "YourAttributeStore",
types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"),
query = "{0}", param = c.Value);
テンプレート ルールを実際に有効にするには、新しく生成されたクレームに発行者を設定する必要もあります。これは、「AD AUTHORITY」からのものかどうかを確認するためです。これが正当なアプローチかどうかはわかりませんが、便宜上これを行います。これには、次のような 2 番目のルールが必要です。
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> issue(Issuer = "AD AUTHORITY", OriginalIssuer = "AD AUTHORITY",
Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
Value = c.Value);
異なる一意の ID プロバイダーの違いに関しては、それをどのように処理するかはあなたの選択です。すべてのプロバイダーに対してカスタム ルールを作成し、属性ストアに区別させるか、属性ストアに対して汎用クエリを作成することができます。ここでは、Claim Rule Language のドキュメントが役立ちます。
注: これは、ADFS/WIF/Claims ベースの ID に関する本では一般的に避けられているトピックのようです。これは私の個人的な解決策であり、ベスト プラクティスではないかもしれません。私が思いついた最も便利な方法です。誰かがこの特定のトピックの報道を知っている場合: 共有してください.
また、注意: ADFS ではルールの順序が重要であり、最初のルールで作成された要求は次のルールで使用できます。これがこれを可能にするものです。
編集:この質問が1年前に尋ねられたのを見ませんでした...とにかく、この回答が誰かの役に立てば幸いです。