Аутентификация в REST API Sharepoint Online из основного приложения dotnet - PullRequest
1 голос
/ 30 сентября 2019

У меня есть существующий инструмент PHP, который я переписываю в dotnet core 3.0, который просматривает данные на Sharepoint Online, Exchange Online и OneDrive.

У него есть регистрация приложения, которую я одобрил для доступа к различным арендаторам. затем инструмент использует oauth-вызовы, используя поток приложений, чтобы получить токен доступа, который используется в вызовах для чтения данных и т. д.

У меня возникла проблема с созданием токена доступа в ядре dotnet для доступа к Sharepoint онлайн с помощью REST,Техника использования ConfidentialClientApplicationBuilder с моим идентификатором клиента, секретом и т. Д. С последующим вызовом AcquireTokenForClient, по-видимому, работает для Exchange Online EWS и Graph, но не работает для Sharepoint Online, ответ, содержащий «Токен Unsupported app only».

Мой код PHP выполняетэквивалент также включает JWT как 'client_assertion', и я нашел следующую статью, в которой есть код, который, кажется, выполняет шаги, очень схожие с тем, что делает мой PHP-код: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-net-client-assertions (я ценю, что код написан для аутентификациив Azure, но конструкция утверждения выглядит так же, как конструкция PHP кода JWT. И этот код, я думаю, предполагает, что у нас есть сертификат в частном хранилище с закрытым ключом)

Я пыталсясделайте то же самое, используя System.IdentityModel.Tokens.Jwt (не все классы в этой статье доступны в ядре), и после обхода нескольких проблем не удалось создать токен JWT, но при использовании для генерации токена доступа и мапри вызове арендатора он возвращает 401 отказано в доступе. Это может быть одна из дюжины мест в коде, который я использую, чтобы собрать токен, поскольку у меня нет точного примера того, что именно я пытаюсь сделать.

Мой интерес конкретноиспользование REST с Sharepoint, поскольку он поддерживает некоторые операции, Graph v1 не поддерживает, и я не хочу использовать Graph beta, и я знаю, что есть некоторые порты CSOM для работы на Core, но я предпочитаю не идти по этому пути.

Итак, я хотел бы найти пример, касающийся следующих ограничений: * Работает на C # как приложение "netcoreapp3.0" * Подключается к SharepointOnline с использованием API REST * Для сертификата, необходимого для подписиJWT У меня есть файл CERTIFICATE, файл PRIVATE KEY и файл thumb * Я пытаюсь запустить такие операции, как «перечисление сведений о корневом сайте», которые разрешены при регистрации приложения * У меня уже есть URL клиента, идентификатор, идентификатор клиента регистрации приложенияи секрет клиента

Кто-нибудь укажет мне хороший пример, или дайте мне знать какие-нибудь вероятные "ошибки"?

...