Я пытаюсь написать пакет R, чтобы пользователи могли получать доступ к файлам в своих папках OneDrive из R. API — это Microsoft Graph.
Все отлично работает с OneDrive для бизнеса (это, как я понимаю, под капотом SharePoint). Однако я не могу заставить его работать с личным OneDrive.
consumers
Когда я использую регистрацию приложения в собственном клиенте AAD, я получаю следующую ошибку от конечной точки авторизации consumers
AAD:
AADSTS50020: учетная запись пользователя «[email protected]» от поставщика удостоверений «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.
consumers
В качестве хака я попытался использовать регистрацию приложения Azure CLI. Это терпит неудачу с
AADSTS65002: Согласие между основным приложением «04b07795-8ddb-461a-bbee-02f9e1bf7b46» и основным ресурсом «00000003-0000-0000-c000-000000000000» должно быть настроено с помощью предварительной авторизации. Посетите https://identitydocs.azurewebsites.net/static/aad/preauthorization.html, чтобы узнать подробности.
9188040d-6c67-4c5b-b112-36a304b66dad
Наконец, я попытался использовать регистрацию приложения CLI с этим арендатором, что также не удалось:
неавторизованный_клиент: клиент не существует или не включен для потребителей. Если вы являетесь разработчиком приложения, настройте новое приложение через регистрацию приложений на портале Azure по адресу https://go.microsoft.com/fwlink/?linkid=2083908.
Какие точные шаги мне нужно сделать, чтобы получить доступ к моему личному OneDrive?
@AllenWu А, я вижу, у меня ошибка в коде; Я использовал «consumers.onmicrosoft.com» вместо «потребители». Это работает сейчас
@AllenWu Просто чтобы подтвердить, я должен поговорить с graph.microsoft.com
, чтобы добраться до моего личного Onedrive, а не api.onedrive.com
?
Да. Вы должны обратиться к graph.microsoft.com
, потому что токен доступа предназначен для Microsoft Graph, а не api.onedrive.com
. Вы решили эту проблему правильно? Можете ли вы опубликовать ответ, чтобы помочь другим?
Оказывается, в моем коде была ошибка: я использовал арендатора consumers.onmicrosoft.com
вместо consumers
. Процесс связи с Graph для личного OneDrive, который работал у меня, был следующим:
consumers
https://graph.microsoft.com/{scope} offline_access openid
где объем один из перечисленных здесьhttps://graph.microsoft.com/v1.0
.Что касается этого последнего пункта, обратите внимание, что документация здесь неверна или, по крайней мере, устарела, поскольку она по-прежнему указывает https://api.onedrive.com/v1.0
в качестве конечной точки для личных запросов OneDrive.
Документация нуждается в некоторых разъяснениях, поэтому спасибо, что обратили на нее внимание. В большинстве случаев для доступа к личным запросам OneDrive следует использовать Microsoft Graph. Если вам в конечном итоге потребуется поговорить с прямым API (что для нового приложения вы не должны, если вы еще этого не сделали), вы можете использовать прямую конечную точку, которую вы вызываете для этого, и вы бы использовали Microsoft Graph чтобы узнать URL. В конечном счете, API Microsoft Graph является правильным, и мы обновим документацию, чтобы сделать ее более понятной.
Похоже, он не рассматривает вашу учетную запись как личную учетную запись. Пожалуйста, поделитесь своим запросом на получение токена доступа, позвонив в конечную точку авторизации
consumers
.