Kev*_*ope 2 c# sharepoint 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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我也尝试过传递NetworkCredentials对象,但这也不起作用(我也收到了 401 响应)。
进一步说明,我已经研究了仅限 App 的身份,但我不相信我可以使用这些身份,因为它们对管理分类法(即术语库中的托管元数据)和管理文件(尽管这可能是一个仅对使用 CSOM 的限制,我在此页面上不清楚)
基于此,你能看出我在这里做错了什么吗?或者,如果有其他/更好的方法可以做到这一点,我也愿意!
编辑:看起来 whenLegacyAuthProtocolsEnabled设置为 False 我明确不能使用SharePointOnlineCredentials该类,基于此页面。鉴于此,看起来我需要一种不同的方法来获得此访问权限!
这是一个非常常见的问题,我们在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);
}
Run Code Online (Sandbox Code Playgroud)
在控制台应用程序中添加SharePointPnPCoreOnline Nuget 包。之后,您将能够登录到 SPO 环境。基本上,这将提示您在浏览器窗口中输入您的详细信息。
您所描述的守护进程场景可以使用 Azure 应用程序通过 JWT 令牌进行身份验证和获取权限来实现。有关演练,请参阅使用用户名和密码或 Windows 集成身份验证以非交互方式向 Azure AD 进行身份验证
如果您之前没有使用过 Azure 应用程序,我建议您花一些时间来熟悉。它们基本上是您创建和批准的受信任主体,以便您的应用程序使用它们的权限来执行 SharePoint 操作。
我也不再推荐 CSOM 进行任何新开发,尤其是 SP Online,因为我相信 Microsoft 正在(或多或少公开地)停用此 API。正如 Gautam 所推荐的那样,使用 PnP 库,该库会保持最新状态,并且是 REST API 和托管元数据等的一个很好的包装器。
| 归档时间: |
|
| 查看次数: |
17124 次 |
| 最近记录: |