OneDrive API: не аутентифицирован, должен проходить аутентификацию для использования синтаксиса «/ drive» - PullRequest
0 голосов
/ 26 апреля 2018

Я использую OneDrive api для загрузки файлов в моем приложении Ruby on Rails, и OneDrive API начал выдавать ошибку без проверки подлинности при загрузке файла с использованием конечной точки / drive / root: / # {filename}: / content.Ошибка приведена ниже:

{"error"=>{"code"=>"unauthenticated", "message"=>"Must be authenticated to use '/drive' syntax"}}

Затем я получил новый refresh_token, следуя документам OneDrive с использованием области файлов .readwrite offline_access.

Для аутентификации OneDrive я отправляю запрос POST вконечная точка https://login.microsoftonline.com/common/oauth2/v2.0/token для получения access_token с использованием refresh_token со следующими заголовками и телом:

headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
body = {
  'client_id'     => "<Client ID>",
  'grant_type'    => "refresh_token",
  'redirect_uri'  => "<Redirect URI>",
  'client_secret' => "<Client Secret>",
  'refresh_token' => "<Refresh Token>",
}

Использую ли я правильную конечную точку для получения access_token из refresh_token?

Base uriЯ использую для загрузки файлов в OneDrive https://api.onedrive.com/v1.0

Может кто-нибудь, пожалуйста, помогите мне, почему я получаю ошибку без аутентификации или как я могу использовать синтаксис '/ drive' для аутентификации?

Спасибозаранее!

1 Ответ

0 голосов
/ 27 апреля 2018

Решено:

В моем случае я использовал «Поток кода» для аутентификации и использовал следующий URL для получения code в параметре:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=CLIENT_ID&scope=files.readwrite offline_access&response_type=code&redirect_uri=REDIRECT_URI

Посещение указанного выше URL открыло URL-адрес перенаправления с длинным параметром code, который я использовал для получения access_token и refresh_token, но access_token не работал при загрузке файлов в OneDrive и повторной настройке «неаутентифицированной» ошибки, упомянутой ввопрос.

После исследования я обнаружил, что URL, который я использую для получения code для аутентификации OneDrive, предназначен для Microsoft Graph.Ниже приведен правильный URL-адрес для учетной записи Microsoft:

https://login.live.com/oauth20_authorize.srf?client_id=CLIENT_ID&scope=onedrive.readwrite offline_access&response_type=code&redirect_uri=REDIRECT_URI

Посещение указанного выше URL-адреса в браузере перенаправило меня на страницу с параметром кода, но это был небольшой код, такой как K9vb4e786-afg6-1a3b-1234-12abc01234ca.

* 1020.* Я использовал этот код для получения access_token и refresh_token, используя следующий запрос POST:
body = {
  client_id: "CLIENT_ID",
  redirect_uri: "REDIRECT_URI",
  client_secret: "CLIENT_SECRET",
  code: "CODE",
  grant_type: "authorization_code"
}
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }

r=HTTParty.post('https://login.live.com/oauth20_token.srf', headers: headers, body: body)

Этот запрос возвратил access_token и refresh_token в ответ.Я использовал это refresh_token для получения access_token в каждом запросе и успешно загруженном файле.

Вывод: Я использовал процесс аутентификации Microsoft Graph, то есть https://docs.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/graph-oauth, которыйбыло неверно.Затем я выполнил проверку подлинности учетной записи Microsoft, т. Е. https://docs.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/msa-oauth, которая разрешила проблему.

Обновление:

Позже я использовал свою служебную учетную запись Office-365 для OneDrive.загрузка файла.Для этой учетной записи процесс аутентификации OneDrive отличается, т. Е. https://docs.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/aad-oauth, и он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...