我有一个在 Sharepoint 上运行良好的代码,但是该 sharepoint 具有多因素身份验证,我阅读了,发现我必须更改连接到 sharepoint 的方式。所以我安装了PnP。框架和这部分代码
string siteUrl = "https://cconsultingspa.sharepoint.com/";
string clientId = "MyclientId";
string clientSecret = "pass?";
SecureString securePassword = ConvertToSecureString(clientSecret);
using (var cc = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, clientId, clientSecret))
{
cc.Load(cc.Web, p => p.Title);
cc.ExecuteQuery();
Console.WriteLine(cc.Web.Title);
};
但是它给了我这个错误
“令牌请求失败。” 远程服务器返回错误:(401) 未经授权
但用户名和密码在 MFA 禁用时有效
据我所知,当您使用应用程序凭据进行连接 (GetACSAppOnlyContext) 时,MFA 不起作用。
此处的问题可能是应用程序无权访问目标 SharePoint 网站,即“https://cconsultingspa.sharepoint.com”
要解决此问题,您可以尝试导航到 appinv.aspx 页面并添加权限 XML 来直接授予应用程序对 SharePoint 网站的访问权限(请参阅此处的参考文档 - https://learn.microsoft.com/en-我们/sharepoint/dev/solution-guidance/security-apponly-azureacs)
注意:使用 Azure ACS(访问控制服务)进行 SharePoint Online 已于 2023 年 11 月 27 日停用。停用意味着该功能将不会获得任何新投资,但仍受支持。有关更多信息,请访问 - https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/retirement-announcement-for-azure-acs
如果上述方法有效,那么最佳实践是创建一个 EntraID 应用程序并授予其访问 SharePoint 数据的适当权限。