#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 является правильным, и мы обновим документы, чтобы они были более понятными.