从 .Net 应用程序访问 SharePoint 数据时处理凭据

Posted

技术标签:

【中文标题】从 .Net 应用程序访问 SharePoint 数据时处理凭据【英文标题】:Handling credentials when accessing SharePoint data from .Net application 【发布时间】:2018-07-17 23:19:56 【问题描述】:

我正在尝试从 .Net (C#) Web 应用程序访问一些 SharePoint 列表。我用谷歌搜索了这个主题,似乎共识是使用 WCF 数据服务(下面列出的步骤)。获取数据后,我将其显示在 jQuery 数据表中,使用 Ajax Web 服务调用来获取数据。

第一步是运行 DataSvcUtil.exe 来创建一个 DataService.cs 文件,其中包含从 .NET Framework 客户端应用程序访问数据服务所需的客户端数据服务类。然后添加了对 Microsoft.Data.OData.dll 和 Microsoft.Data.Services.Client.dll 的引用。

我创建了一个 Web 服务 API(如下)。在本地运行,从 VS 2017 或从应用程序服务器上的 IIS,我得到所有数据,尽管在 80 秒内(对于 16,000 条记录来说太长了)。但是,当我从浏览器运行此程序时,我收到状态码 500 错误,发现这是由于凭据问题。

我将凭据设置为 CredentialCache.DefaultCrdentilas(后来更改为 DefaultNetworkCredentials),但必须使用 NetworkCrdentials(UserID, pwd, domain)。

[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]

public string GetCompletedAssessments()

    SPService_DataContext dc = new SPService_DataContext(new Uri("http://my_sp_site_.com/sites/nvx/SPService/_vti_bin/listdata.svc/"));
    dc.Credentials = System.Net.CredentialCache.DefaultCredentials;

    // Had to change the above to this to get it to work
    dc.Credentials = new System.Net.NetworkCredential(MyUserID, MyPassword, DomainName);

    var source = dc.CompletedAssessments;
    string JSONresult = JsonConvert.SerializeObject(source);
    return JSONresult;

但是,我只是使用我的凭据进行测试,这是不可行的。使用我正在使用的访问数据的方法我可以做些什么,或者我应该使用其他不需要提供凭据的数据访问方法吗?

应用程序位于与服务器 SharePoint 所在域相同但位置不同的服务器上。

【问题讨论】:

【参考方案1】:

如果您希望应用程序读取数据,则必须提供凭据。

您可以尝试使用 REST 或 JSOM 从客户端获取数据。这样就使用了用户凭据,结果将被安全修整。

REST 示例:http://my_sp_site_.com/sites/nvx/SPService/_api/web/lists/GetByTitle('Pages')/items

如果您使用application/json;odata=verbose 添加Accept 标头,则结果为JSON。否则它在 XML 中。

SharePoint REST 文档:https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/working-with-lists-and-list-items-with-rest

【讨论】:

以上是关于从 .Net 应用程序访问 SharePoint 数据时处理凭据的主要内容,如果未能解决你的问题,请参考以下文章

从基于 Sharepoint 声明的身份验证 Web 应用程序中的代码访问 Windows 共享

提高 SharePoint 页面访问速度之 IIS 应用池回收

在 SharePoint Web 应用程序和 ASP.NET Web 应用程序之间传递用户凭据

从 C# 访问 Sharepoint 远程文件夹

在 ASP.NET 中开发 SharePoint Web 部件 [关闭]

部署网站后在 SharePoint 中禁止 403