不使用 SharePointOnlineCredentials 的 Project Online CSOM

Project Online CSOM without using SharePointOnlineCredentials

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

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

上面 link 中建议的方法是使用 ClientId 和 ClientSecret。我已经用 PnP Core AutheticationManager function GetAppOnlyAuthenticatedContext. This works for a ClientContext object for SharePoint Online but it does not work after modifying this function to return a ProjectContext object. A ProjectServerError "GeneralNotLicensed" is thrown because the SharePoint Principal does not have a Project Online license (see here).

测试过了

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

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

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

将此翻译成 C# 代码并调用 Project Online CSOM 工作!