c# - 使用 CSOM 对 Sharepoint Online 进行身份验证

标签 c# sharepoint sharepoint-online

我觉得我在这里错过了一些东西。我正在尝试通过 C# 控制台应用程序登录到 SPO 租户,但出现错误:

Cannot contact web site 'https://xxx.sharepoint.com/' or the web site does not support SharePoint Online credentials. The response status code is 'Unauthorized'.



我知道该帐户有效,因为我可以直接从浏览器使用该帐户登录。最后,我想使用 CSOM 对 SP 列表、术语库和文档库进行 CRUD 操作,但 CSOM 不是硬性要求(我承认不知道 REST API 是否可以完成整个工作) .

我已经看到改变 LegacyAuthProtocolsEnabled值为 True 可以帮助解决这个问题,但我们的安全人员不允许我启用该功能。

代码非常简单:
SecureString passWord = getPassword();
using (var context = new ClientContext(URI))
{
    context.Credentials = new SharePointOnlineCredentials(userName, passWord);//new NetworkCredential(userName, passWord);//
    context.Load(context.Web, web => web.Title);
    context.ExecuteQuery(); //Error happens here
    Console.WriteLine("Your site title is: " + context.Web.Title);
}

如您所见,我也尝试通过 NetworkCredentials对象,这也不起作用(我也收到 401 响应)。

进一步说明,我已经研究了仅限应用程序的身份,但我不相信我可以使用这些身份,因为它们对管理分类法(即术语库中的托管元数据)和管理文件(尽管这可能是一个仅限制使用 CSOM,我不清楚 this page )

基于此,你能看出我在这里做错了什么吗?或者,如果有不同/更好的方法来做到这一点,我也愿意!

编辑 : 好像当LegacyAuthProtocolsEnabled设置为 False 我明确不能使用 SharePointOnlineCredentials类,基于 this page .鉴于此,看起来我需要一种不同的方法来获得此访问权限!

最佳答案

这是我们在 LegacyAuthProtocolsEnabled 时经常遇到的一个非常普遍的问题。设置为 False .当我们在租户中配置多重身份验证 (MFA) 时,它也会影响我们。

然后为了向 SPO 进行身份验证,我们使用 GetWebLoginClientContext SharePoint PnP 核心库的方法,可用作 nuget 包。

所以,修改你的代码如下:

AuthenticationManager authManager = new AuthenticationManager();
using (var context = authManager.GetWebLoginClientContext(URI))
{
    context.Load(context.Web, web => web.Title);
    context.ExecuteQuery();
    Console.WriteLine("Your site title is: " + context.Web.Title);
}

添加 SharePointPnPCoreOnline控制台应用程序中的 Nuget 包。之后,您将能够登录到 SPO 环境。基本上,这将提示您在浏览器窗口中输入您的详细信息。

关于c# - 使用 CSOM 对 Sharepoint Online 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52707476/

相关文章:

sharepoint - 如何使用 graph api beta 从 sharepoint 站点获取列表

jquery - 使用 JQuery 通过 sharepoint Web 服务删除文档

c# - 如何使用 C# 代码将 pdf 转换为图像?

c# - 尝试在 foreach 循环中将对象 append 到 Enumerable

c# - 如何通过 Regex.Split() 在 LINQ 查询中创建一个 string[]

powershell - 为什么这个 powershell for 循环在 4 次迭代后停止

sharepoint - 如何在 SharePoint Online 中创建长度超过 255 个字符的动态超链接

typescript - 如何在运行时配置 spfx 扩展(如 ENV 变量)?

c# - MongoDB .NET 流畅聚合查询

c# - 带有 Linq 表达式的 EF Core SQL 函数 LIKE 方法不适用于非字符串类型