Решено:
В моем случае я использовал «Поток кода» для аутентификации и использовал следующий 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, и он работает.