1

我创建了一个自定义声明提供程序,以允许用户从现有网站登录 SharePoint。这会发出声明,包括格式为 username@domain 的 UPN 声明。在我启用SharePoint Web 应用程序 web.config之前mapToWindows,用户可以正常登录。此时我收到一条标准的 SharePoint 错误消息,并且跟踪中可以看到以下异常。useWindowsTokenServicesamlSecurityTokenRequirement

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)

我认为 c2wts 模拟部分工作正常,因为如果我禁用由传递的 UPN 声明表示的 AD 帐户,那么当我尝试以该用户身份登录时,SharePoint 中会显示不同的“访问被拒绝”错误。

同样在 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.(Excel)
  • $Resources:ppsma.ServerCommon, ErrorCode_DataSourceCannotGetWindowsIdentityForNonWindowsClaim;(性能点 SSRS 报告)

有没有解决的办法?我需要用户的UPN是用来查询这些背后的SSAS数据的账号,所以使用固定的连接字符串是不可行的。

4

2 回答 2

0

事实证明,SharePoint 不支持 mapToWindows 配置值。您必须依赖 SharePoint 的每个部分都可以识别声明并自行转换令牌。这有点痛苦,因为 PerformancePoint 和 Excel Services 无法识别声明,因此如果您的 SSAS 多维数据集需要 AD 安全性,您最终会被困在使用 Windows 身份验证。

于 2011-12-08T14:02:51.803 回答