SharePoint 2013インストールの実装の一環として、Windows Server2012R2でADFSを使用してSSOを構成しました。
2つの別個のADフォレストがあり、1つはHosted SharePoint/ADFSの一部として、もう1つはオンサイトの企業フォレストです。
現在、企業のADをClaims Provider Trust
のSharePoint ADFS
として設定しています。企業のADからSharePointに電子メール属性を正常に渡すことができます。
私が達成したいのは、Hosted AD Forest
アカウントを使用したログオンの一部として、Corporate AD
からの何らかの形式のクレームインジェクションです。
具体的には、ユーザーはSharePointライセンスを決定するセキュリティグループのメンバーになります。セキュリティ上の理由から、企業ADからこのクレーム情報を取得したくないので、ユーザーはライセンスステータスを変更できます。
したがって、すべてのユーザーは実際には両方のフォレストにADアカウントを持っています。サインインプロセスの一部として企業の資格情報を入力することにより、シングルサインオンが提供されます。
hosted ADFS
からincoming Email Address Claim
に一致する独自のADフォレスト内のユーザーを検索し、Corporate ADFS
を挿入するようにRole claim
に指示する方法はありますか。 hosted forest
と上記の電子メールの主張?
私が達成しようとしていることについては、下の写真を参照してください(MSペイントの簡単な描画でごめんなさい!):
ステップ4と5を達成するにはどうすればよいですか?
現在のクレームルールHosted ADFS
、Acceptance Transform Rules
のCorporate Claim Provider Trust
:
Hosted ADFS
の場合、Issuance Transform Rules
、SharePoint Relying Party
:
はい、うまくいくはずです。ホストされたADFSでクレームルールを制御し、クレームにCorp ADFSからのキーがある場合は、そのキーを使用して通常のAD検索クレームルールを実行できます。
最終的にこれが機能するようになりましたが、実際には思ったほど悪くはありませんでした。SharePoint証明書利用者にカスタムIssuance Transform Rule
をコーディングする必要がありました。
これは私が思いついたものです:
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", "http://schemas.Microsoft.com/ws/2008/06/identity/claims/role"), query = "userPrincipalName={0};userPrincipalName,tokenGroups;MYDOMAIN\accountthatdoesnotexist", param = c.Value);
基本的に、これは、受信クレームセットで電子メールアドレス要求が定義されている場合、ADに電子メールアドレスを照会し、email address
に一致するuserPrincipalName
を見つけることを示しています。次に、必要なupn
およびtokenGroups
クレームとしてupn
およびrole
属性を返すだけです。
これをルール番号1として証明書利用者に挿入しました。一部のユーザーはサードパーティのADFSを認証しないため、これにより、互換性が最も高まると思います。
[AD属性の送信]テンプレートを使用するときにデフォルトのクレームコードを検査した後、ルールがwindowsaccountname claim
を受信した場合にのみ実際に実行されます(このクレームは、ユーザーがサードパーティのADFSなしでサインインした場合にのみ証明書利用者に渡されます) )。
したがって、ユーザーがwithout a third party ADFS
にサインインしている場合、ActiveDirectory属性ストアがemail address claim
を送信しないため、カスタムルールが無視されるという状況があります。さらに、ユーザーがWITH a third party ADFS
にサインインしている場合、windowsaccountname
クレームが設定されていないため、Send LDAP Attributes
ルールは無視されます。
最後に、最初の試みで、イベントログにエラーメッセージが表示されたため、ホストされたADで従来のドメイン\ユーザー名アカウントではなくUPNのみを使用しているため、最初は行き詰まっていると思いました。
Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.AttributeStoreQueryFormatException:
POLICY3826:
User name '[email protected]' in LDAP query';userPrincipalName,tokenGroups;[email protected]'
is not in the required 'domain\user' format.
ただし、私にとって朗報は、domain\usernameのusername部分が実際には無視されることです。 https://technet.Microsoft.com/en-us/library/adfs2-help-attribute-stores%28WS.10%29.aspx
QUERY = <QUERY_FILTER>;<ATTRIBUTES>;<DOMAIN_NAME>\<USERNAME>
クエリのこの部分は、LDAPクエリを実行するために接続するドメインコントローラーを識別して特定します。
また、Active Directory属性ストアの場合でも、USERNAMEは無視されることに注意してください。
したがって、LDAPフィルターがデフォルト(クエリフィルターが空白のままの場合)userPrincipalName
ではなくsamAccountName
で一致するように少し調整することで、これは完全に機能するようになりました。