首页 > 解决方案 > 使用 CSOM 对 Sharepoint Online 进行身份验证

问题描述

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

无法联系网站“ https://xxx.sharepoint.com/ ”或该网站不支持 SharePoint Online 凭据。响应状态代码为“未授权”。

我知道该帐户有效,因为我可以直接从浏览器使用该帐户登录。最后,我想使用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 的限制,我从这个页面不清楚)

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

编辑:看起来什么时候LegacyAuthProtocolsEnabled设置为 False 我明确地根本不能使用这个SharePointOnlineCredentials类,基于这个页面。鉴于此,看起来我需要一种不同的方法来获得这种访问权限!

标签: c#sharepointsharepoint-online

解决方案


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

然后,为了向 SPO 进行身份验证,我们使用GetWebLoginClientContextSharePoint 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 环境。基本上,这将提示您在浏览器窗口中输入您的详细信息。


推荐阅读