【问题标题】:401 Unauthorized exception throws on Sharepoint Webpart using DataContext使用 DataContext 在 Sharepoint Webpart 上引发 401 未经授权的异常
【发布时间】:2016-09-23 04:45:24
【问题描述】:

我正在使用以下代码来创建 Sharepoint 数据上下文的新实例:

spDataContext con = new spDataContext(new Uri("http://mysite/subsite/_vti_bin/ListData.svc"));
con.Credentials = CredentialCache.DefaultCredentials;

然后我尝试使用获取项目

var result = con.testingList.ToList();

然后下面的错误显示:

“401 未经授权”

这是错误的屏幕截图:

但如果我通过提供共享点管理员用户名和密码来更改凭据,我就可以获取这些项目。

con.Credentials = new NetworkCredential(username, password);

但问题是:我想使用当前用户的凭据而不是管理员帐户,因为并非所有项目都应该被当前用户看到。

来自 IIS 的一些附加信息:

一开始所有的认证方式都开启了,然后我尝试关闭basic和digest认证看看是否有帮助,但还是抛出异常。

那么如何解决这个问题呢??

【问题讨论】:

    标签: c# sharepoint sharepoint-2013 web-parts datacontext


    【解决方案1】:

    通过检查断点、写入日志或检查服务器的审计跟踪/日志 (IIS/SharePoint) 来检查您实际连接的帐户 - 您确定它是有效帐户而不是 IUSR_xyz IIS 帐户或类似的帐户那?如果您正在使用分布式架构,还要检查您是否没有遇到Kerberos "double hop"。在将另一个服务器/服务添加到组合中时,这通常会使您绊倒。

    【讨论】:

    • 感谢您的回答,不幸的是,由于安全原因,我无法在调试模式下检查我正在连接的帐户,它们将显示为空。双跳部分,明天早上再深入了解~
    • 这听起来很奇怪 - 这可能是您生态系统中某个地方的安全问题 - 权限有限,很难排除故障。您可以让具有相关系统权限的人与您合作吗?祝你好运!
    【解决方案2】:

    为了让它工作,你应该在 IIS 中配置Authentication 选项,如下所示:

    • 匿名身份验证 - 禁用
    • ASPNET 模拟 - 已禁用
    • Windows 身份验证 - 已启用

    您可以使用CredentialCache.DefaultCredentials,但我建议从使用 WCF 服务切换到使用 CSOM (Microsoft.SharePoint.Client)。

    【讨论】:

    • 我已经按照你说的设置了 IIS Authentication,但是 401 仍然存在……另外,CSOM 和 CAML 一样吗?
    • no CSOM 是一种 SharePoint 对象模型,使您能够执行在以前的 SharePoint 版本中需要 Web 服务才能完成的操作。更多信息:msdn.microsoft.com/en-us/library/office/fp179912.aspx
    • 还要确保您有权访问您尝试引用的服务。
    • 谢谢,我明天早上去看看
    【解决方案3】:

    最后的原因是:

    我的类库中没有 System.Web 程序集,所以系统无法获取 CredentialCache.DefaultCredentials。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 2012-05-17
      • 2017-03-16
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多