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

Я пытаюсь написать пакет 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.

Регистрация приложения 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?

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

Allen Wu 14.12.2020 05:29

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

Hong Ooi 14.12.2020 05:59

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

Hong Ooi 14.12.2020 06:00

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

Allen Wu 14.12.2020 06:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
1 114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Jeremy Kelley - Microsoft 17.12.2020 18:24

Другие вопросы по теме