Каждую ночь у нас работает консольное приложение, которое обновляет планы некоторых проектов с помощью CSOM. При этом для проверки подлинности используются SharePointOnlineCredentials.
Но ИТ-отдел хочет изменить флаг LegacyAuthProtocolsEnabled арендатора на false. Это приводит к тому, что учетные данные SharePointOnlineCredentials больше нельзя использовать, поскольку вы можете прочитать здесь.
Предлагаемый подход в приведенной выше ссылке заключался в использовании ClientId и ClientSecret. Я проверил это с помощью функции Ядро PnP AutheticationManager GetAppOnlyAuthenticatedContext. Это работает для объекта ClientContext для SharePoint Online, но не работает после изменения этой функции для возврата объекта ProjectContext. Ошибка ProjectServerError GeneralNotLicensed возникает, поскольку у участника SharePoint нет лицензии Project Online (см. здесь).
Моя третья попытка состояла в том, чтобы использовать класс Office365ClaimsHelper, найденный здесь. Это связывается с https://login.microsoftonline.com/extSTS.srf для токена SAML, предоставляя имя пользователя и пароль. Теперь этот подход работает для демо-среды, но не для производственной среды. Я подозреваю, потому что у него многофакторная аутентификация.
Короче говоря: есть ли у кого-нибудь идеи о том, как получить объект ProjectContext без использования SharePointOnlineCredentials и без отображения всплывающего окна для входа пользователя в среду многофакторной проверки подлинности?
Удалось найти работающее решение благодаря следующему скрипту PowerShell: https://blogs.technet.microsoft.com/sharepointdevelopersupport/2018/02/07/sharepoint-online-active-authentication/
Перевел это в код C#, и вызовы Project Online CSOM работают!
пожалуйста, предоставьте шаги или код. поскольку ответы только по ссылкам не рекомендуются, так как они могут быть сломаны в будущем