在SharePoint 2010 Web部件中模拟用户以调用WCF服务

时间:2014-01-16 20:00:05

标签: c# wcf sharepoint-2010 single-sign-on kerberos

我有一个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服务器的事件或共享点日志中没有任何内容。关于如何排除故障的任何想法?感谢您提供的任何帮助。

1 个答案:

答案 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/