我正在尝试使用 Sharepoint 客户端对象模型引用我的 aspx 页面中的共享点列表项。我已被授予对此列表的“完全控制”权限。问题是,只有当我显式设置 ClientContext.Credentials 并将密码硬编码到页面中时,我才能完成请求。显然,我不希望我的网站访问者能够根据我的凭据访问内容。

这可以使其工作,但不满足项目要求:

ClientContext cc = new ClientContext("http://sharepoint.site.com/sitename");
cc.Credentials = new NetworkCredential("username", "password", "domain");

我已经在 web.config 中进行了设置,并且似乎工作正常。当我检查时 WindowsIdentity.GetCurrent().Name 它显示了我正确的“域\用户名”信息,我认为这应该意味着我的凭据是有效的。那么为什么 SharePoint 会拒绝 cc.ExecuteQuery(); 带有“System.Net.WebException 远程服务器返回错误:【401】未经授权。”

我可以在屏幕上放置一个文本框,让用户输入密码以用于创建 NetworkCredential 对象,但我现在可以告诉你,客户(我的老板)不会对此感到满意,并且会告诉我他希望我找到解决办法。

编辑:Sharepoint 站点托管在不同的站点上,但位于同一公司 Intranet 内。

有帮助吗?

解决方案

您是否使用 kerberos、ntlm、表单或声明?我的猜测是您正在使用 NTLM 并遇到 NTLM 双跳“问题”。

http://blogs.msdn.com/b/besidethepoint/archive/2010/05/09/double-hop-authentication-why-ntlm-fails-and-kerberos-works.aspx

最简单的下一步可能是将您的站点更改为 Kerberos。我有一篇博客文章,其中概述了一些有助于在 SharePoint 中设置 kerberos 的资源。

http://steve.thelineberrys.com/resources-for-setting-up-kerberos-authentication-in-sharepoint/

其他提示

你有没有尝试过使用 DefaultCredentials 相反,要获取当前用户的身份?

此外:此 aspx 是否在您的 SharePoint 站点中运行?如果是这样,为什么要使用客户端对象模型?只需使用服务器 OM 即可。更容易,也更少麻烦。

许可以下: CC-BY-SA归因
scroll top