我觉得我在这里错过了一些东西。我正在尝试通过 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/