ユーザーが既存の Web サイトから SharePoint にサインインできるようにするカスタム クレーム プロバイダーを作成しました。これにより、username@domain 形式の UPN のクレームを含むクレームが発行されます。ユーザーは、SharePoint Web アプリケーション web.config で有効mapToWindows
にしてuseWindowsTokenService
下に移動するまで、問題なくログインできます。samlSecurityTokenRequirement
この時点で、標準の SharePoint エラー メッセージが表示され、次の例外がトレースに表示されます。
Exception fetching current thread user in SPUtility.CacheClaimsIdentity: Exception of type 'System.ArgumentException' was thrown.
Parameter name: identity 0.00143314303912927 0.001357
Runtime Tag(tkau) System.ArgumentException: Exception of type 'System.ArgumentException' was thrown.
Parameter name: encodedValue
at Microsoft.SharePoint.Administration.Claims.SPClaimEncodingManager.DecodeClaimFromFormsSuffix(String encodedValue)
at Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager.GetProviderUserKey(String encodedSuffix)
at Microsoft.SharePoint.ApplicationRuntime.SPHeaderManager.AddIsapiHeaders(HttpContext context, String encodedUrl, NameValueCollection headers)
at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PreRequestExecuteAppHandler(Object oSender, EventArgs ea)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
渡された UPN クレームによって表される AD アカウントを無効にすると、そのユーザーとしてログインしようとすると、SharePoint に別の「アクセスが拒否されました」というエラーが表示されるため、c2wts 偽装部分は正しく機能していると思います。
また、SharePoint ログには、UPN が Windows AD アカウントに変換されたように見えます。これは、ログに次の情報が記録されているためです。
Verbose ____Current User=i:DOMAINNAME\SSO_administrator 7b4eac31-d017-429c-87f2-a3100ece6797
アップデート
これは、SharePoint 内での使用がサポートされていない設定のようです。ただし、設定をオフのままにしておくと、SharePoint サイトに埋め込まれた Performance Point および Excel Services のレポートが正しく機能しないようです。次のようなエラーが表示されます。
The data connection uses Windows Authentication and user credentials could not be delegated.
(エクセル)$Resources:ppsma.ServerCommon, ErrorCode_DataSourceCannotGetWindowsIdentityForNonWindowsClaim;
(パフォーマンス ポイント SSRS レポート)
これを回避する方法はありますか?ユーザーの UPN が、これらの背後にある SSAS データのクエリに使用されるアカウントである必要があるため、固定の接続文字列を使用することは現実的ではありません。