【问题标题】:Project Online CSOM without using SharePointOnlineCredentials不使用 SharePointOnlineCredentials 的 Project Online CSOM
【发布时间】:2023-12-15 10:59:01
【问题描述】:

我们每天晚上都会运行一个控制台应用程序,它使用 CSOM 更新一些项目计划。这使用 SharePointOnlineCredentials 进行身份验证。

但 IT 部门想将租户的 LegacyAuthProtocolsEnabled 标志更改为 false。这导致无法再使用 SharePointOnlineCredentials,因为您可以阅读 here

上面链接中的建议方法是使用 ClientId 和 ClientSecret。我已经使用PnP Core AutheticationManager 函数GetAppOnlyAuthenticatedContext 对此进行了测试。这适用于 SharePoint Online 的 ClientContext 对象,但在修改此函数以返回 ProjectContext 对象后不起作用。由于 SharePoint 主体没有 Project Online 许可证(请参阅here),引发 ProjectServerError "GeneralNotLicensed"。

我的第三次尝试是使用here 找到的 Office365ClaimsHelper 类。这通过提供用户名和密码联系https://login.microsoftonline.com/extSTS.srf 以获取 SAML 令牌。现在这种方法适用于演示环境,但不适用于生产环境。我怀疑是因为它具有多重身份验证。

简而言之:是否有人知道如何在不使用 SharePointOnlineCredentials 且不显示弹出窗口以在多因素身份验证环境中登录用户的情况下获取 ProjectContext 对象?

【问题讨论】:

    标签: sharepoint office365 sharepoint-online csom project-online


    【解决方案1】:

    借助以下 PowerShell 脚本,设法找到了可行的解决方案:https://blogs.technet.microsoft.com/sharepointdevelopersupport/2018/02/07/sharepoint-online-active-authentication/

    将此转换为 C# 代码并调用 Project Online CSOM 工作!

    【讨论】:

    • 请提供步骤或代码。因为不鼓励仅链接的答案,因为它们将来可能会被破坏