我有一个Web部件,我试图以当前登录用户的身份调用WCF服务。在Visual Studio 2013中调试时,Web部件在本地工作 - 调用外部WCF服务。我已经为WCF服务以及SharePoint站点和费用配置了Kerberos,因为这一切都是正确的。我可以从另一个支持Kerberos的Web应用程序以及控制台应用程序中正确调用WCF服务。
现在我想将其转到SharePoint服务器场。但是,在我将解决方案添加到服务器场并激活sharepoint站点上的功能后...当我尝试将Web部件添加到页面时出现错误。该错误出现在一个框中,显示“调用者未通过该服务进行身份验证。”。该错误来自实际方法调用。
我的网页部件代码如下:
WorksiteService.iWorksiteServiceClient wss = new WorksiteService.iWorksiteServiceClient("WSHttpBinding_iWorksiteService");
wss.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
wss.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
WorkSiteDocument[] wd = wss.GetDocumentsByAlias2("test");
sharepoint站点的web.config包含端点:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_iWorksiteService" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://myservicerd.xyz.com/WorkSiteService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_iWorksiteService" contract="WorksiteService.iWorksiteService" name="WSHttpBinding_iWorksiteService">
<identity>
<servicePrincipalName value="myservicerd.xyz.com" />
</identity>
</endpoint>
</client>
</system.serviceModel>
我为什么会收到这个错误的想法?我假设我由于某种原因没有获得当前用户的凭据。在sharepoint服务器或wcf服务器的事件或共享点日志中没有任何内容。关于如何排除故障的任何想法?感谢您提供的任何帮助。
答案 0 :(得分:-1)
我不是Sharepoint Expert,但从Kerberos的角度来看,我建议像Marek建议的那样检查Active Directory中的委派设置。
在像这样的双跳场景中,必须允许中间的“男人”接受客户的身份。
问题仍然是中间的'人'是谁,这取决于IIS配置。 如果IIS配置为内核模式身份验证,则中间身份可能是安装了服务器IIS的计算机帐户。
否则我会假设需要委托权限的身份应该是Web部件运行的应用程序池的标识。
如果您确定了身份,请转到相应的Active Directory帐户(委派选项卡),然后选择“帐户受信任以进行委派”。
也许这篇博客文章可以阐明这一点:http://tekaris.com/blog/2013/04/05/http-400-bad-request-kerberos-authentication-with-iis-2/