Skip to main content
 首页 » 编程设计

c#之在 SharePoint 2010 web 部件中模拟用户以调用 WCF 服务

2024年01月13日33bonelee

我有一个 Web 部件,我试图以当前登录用户的身份调用 WCF 服务。在 Visual Studio 2013 中调试时,Web 部件在本地工作 - 调用外部 WCF 服务。我已经为 WCF 服务和 SharePoint 站点配置了 Kerberos,这样的费用都是正确的。我可以从另一个启用 Kerberos 的 Web 应用程序以及控制台应用程序正确调用 WCF 服务。

现在我想将其滚动到 SharePoint 场。但是,在我将解决方案添加到服务器场并激活共享点网站上的功能之后......当我尝试将 Web 部件添加到页面时出现错误。错误出现在一个框中,上面写着“调用者未通过服务进行身份验证。”。错误来自实际方法调用。

我的 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 服务器的事件或 sharepoint 日志中没有任何内容。关于如何解决此问题的任何想法?感谢您提供的任何帮助。

请您参考如下方法:

我不是 Sharepoint 专家,但从 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/