【发布时间】:2011-07-21 06:49:39
【问题描述】:
我有一个 WCF 服务,它使用带有消息安全性和 Windows 身份验证的 wsHttpBinding。
控制台应用程序服务客户端能够调用该服务,我可以看到 ServiceSecurityContext.Current.WindowsIdentity 和 Thread.CurrentPrincipal.Identity 都代表正确的用户。
正如预期的那样,currentprincipal 是一个 IClaimsIdentity。
当我尝试打开 SharePoint 网站时出现问题:我收到拒绝访问错误,提示无法将模拟身份传递到数据库或共享点服务器。不过,这一切都在同一台机器上,所以不应该有任何双跳身份验证问题。
这不是对声明应用程序中托管的服务进行无头身份验证的正确方法吗?
【问题讨论】:
-
如何打开 SP 网页?您是否使用接受 SPUserToken 的构造函数重载?
-
我也试过了。看来我的 IClaimsIdentity 是 Microsoft.IdentityModel.WindowsClaimsIdentity,而不是 Microsoft.IdentityModel.ClaimsIdentity。如果 IClaimsIdentity 对象不是 ClaimsIdentity,SharePoint 的 SPUserToken 构造函数将引发异常。
-
我猜你需要转换声明。您是否尝试过从 WindowsClaimsIdentity 实例化 ClaimsIdentity ?
-
是的,那没用。我还尝试从端点配置中删除联合扩展,并对服务使用普通 Windows 身份验证。这让我回到了权限被拒绝错误。在给定 windowsidentity 作为输入的情况下,尝试从 claimidentity 实例化 spusertoken 也会失败。
-
如果您只考虑普通 Windows 身份验证,您是否在 WCF 端配置了模拟 (msdn.microsoft.com/en-us/library/ms731090.aspx) ?
标签: wcf sharepoint sharepoint-2010 wif claims