Как пройти аутентификацию в личном OneDrive с помощью Graph REST API

#azure-active-directory #microsoft-graph-api #onedrive

#azure-active-directory #microsoft-graph-api #onedrive

Вопрос:

Я пытаюсь написать пакет R, чтобы пользователи могли получать доступ к файлам в своих папках OneDrive из R. API — это Microsoft Graph.

С OneDrive для бизнеса все работает нормально (насколько я понимаю, это в основном SharePoint под капотом). Однако я не могу заставить его работать с personal OneDrive.

Пользовательская регистрация приложения, consumers конечная точка авторизации

Когда я использую регистрацию приложения под своим собственным клиентом AAD, я получаю следующую ошибку от consumers конечной точки авторизации AAD:

AADSTS50020: Учетная запись пользователя ‘xxxxx@gmail.com » от поставщика удостоверений личности «live.com ‘ не существует в «Потребителях» арендатора и не может получить доступ к приложению ‘d44a05d5-c6a5-4bbb-82d2-443123722380’ (AzureRtest_cli) в этом арендаторе. Сначала необходимо добавить учетную запись в качестве внешнего пользователя в клиенте. Выйдите из системы и войдите снова с другой учетной записью пользователя Azure Active Directory.

Пользовательская регистрация приложения, 9188040d-6c67-4c5b-b112-36a304b66dad конечная точка

С этой страницы видно , что токен должен быть для клиента 9188040d-6c67-4c5b-b112-36a304b66dad , а не для универсального consumers . Когда я попробовал это, я получил, казалось бы, действительный токен. Однако обращение к https://api.onedrive.com/v1.0/drive конечной точке приводит к загадочной ошибке 401.

Регистрация приложения Azure CLI, consumers конечная точка

В качестве взлома я попробовал откорректировать регистрацию приложений Azure CLI. Это не удается с

AADSTS65002: Согласие между сторонним приложением ’04b07795-8ddb-461a-bbee-02f9e1bf7b46′ и сторонним ресурсом ‘00000003-0000-0000-c000-000000000000’ должно быть настроено с помощью предварительной авторизации. Посетите https://identitydocs.azurewebsites.net/static/aad/preauthorization.html для получения подробной информации

Регистрация приложения Azure CLI, 9188040d-6c67-4c5b-b112-36a304b66dad конечная точка

Наконец, я попытался использовать регистрацию приложения CLI для этого арендатора, что также не удалось:

неавторизованный клиент: Клиент не существует или не включен для потребителей. Если вы являетесь разработчиком приложения, настройте новое приложение с помощью регистрации приложений на портале Azure по адресу https://go.microsoft.com/fwlink/?linkid=2083908 .

Какие точные шаги мне нужно сделать, чтобы получить доступ к моему личному OneDrive?

Комментарии:

1. Похоже, он не рассматривает вашу учетную запись как личную учетную запись. Пожалуйста, поделитесь своим запросом на получение токена доступа, позвонив consumers в конечную точку авторизации.

2. @AllenWu Ах, я вижу, у меня была ошибка в моем коде; Я использовал ‘consumers.onmicrosoft.com «вместо «потребителей». Теперь это работает

3. @AllenWu Просто для подтверждения, я должен поговорить graph.microsoft.com , чтобы получить доступ к моему личному Onedrive, не api.onedrive.com так ли?

4. ДА. Вы должны вызвать talk to graph.microsoft.com , потому что токен доступа предназначен для Microsoft Graph, а не api.onedrive.com . Вы правильно решили эту проблему? Можете ли вы опубликовать ответ, чтобы помочь другим?

Ответ №1:

Оказывается, у меня была ошибка в моем коде: я использовал клиента consumers.onmicrosoft.com вместо consumers . Процесс взаимодействия с Graph для personal OneDrive, который работал для меня, был:

  • Используйте поток кода авторизации, как описано здесь, со следующими спецификациями:
    • арендатор: consumers
    • идентификатор клиента: для моей регистрации пользовательского приложения
    • область: https://graph.microsoft.com/{scope} offline_access openid где область является одной из перечисленных здесь
  • Используйте конечную точку API https://graph.microsoft.com/v1.0 .

Что касается этого последнего пункта, обратите внимание, что документация здесь неверна или, по крайней мере, устарела, поскольку она по-прежнему https://api.onedrive.com/v1.0 используется в качестве конечной точки для персональных запросов OneDrive.

Комментарии:

1. Документация нуждается в некотором уточнении, поэтому спасибо, что довели ее до нашего сведения. В большинстве случаев для доступа к персональным запросам OneDrive следует использовать Microsoft Graph. Если вам в конечном итоге понадобится обратиться к API direct (чего для нового приложения делать не следует, если вы еще этого не сделали), вы можете использовать вызываемую вами для этого конечную точку direct, а для поиска URL-адреса использовать Microsoft Graph. В конечном счете, Microsoft Graph API является правильным, и мы обновим документы, чтобы они были более понятными.