3

Следуя инструкциям, описанным в Using OAuth 2.0 for Installed Applications, я получил код авторизации для своего приложения.Google API OAuth2 - Получить токен обновления из токена авторизации

Я зарегистрировал мое заявление как OAuth 2.0 ID клиента в консоли разработчика Google: http://image.prntscr.com/image/bcda26f2ee12463e80e4fdd9401380da.png

Я использую тип «Другой», как приложение будет нужно только, чтобы получить новый access_token (используя refresh_token) и не будет использовать какое-либо согласие пользователя.

Безопасность не имеет значения, так как это будет частное приложение.

Приложение должно иметь возможность читать и писать в электронную таблицу и запускать скрипты Google Apps, связанные с электронной таблицей.

Это все возможно в рамках «https://www.googleapis.com/auth/spreadsheets», в соответствии с Google's OAuth 2.0 Playground:

http://image.prntscr.com/image/a506d2095be1472aa1807a52b01ab1f1.png

Я был в состоянии получить мои руки на код авторизации, используя следующий запрос (после this шага) :

https://accounts.google.com/o/oauth2/v2/auth? 
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets& 
redirect_uri=urn:ietf:wg:oauth:2.0:oob& 
response_type=code& 
client_id=#####.apps.googleusercontent.com 

наклеивая этот URL в браузере, он перенаправляется меня на эту страницу:

http://image.prntscr.com/image/64ccfc9a63be4cb985163c0e3ba0c8ef.png

Таким образом, я получили код авторизации, что, теоретически, может быть обменен на refresh_token и access_token.

Я попытался имитируя запросы, которые OAuth от Google 2,0 площадка делает при обмене кода авторизации для refresh_token и access_token:

http://image.prntscr.com/image/54e7e7da18f044c3a86e2a05b51ba830.png

Он посылает запрос POST по следующему URL-адресу:

https://www.googleapis.com/oauth2/v3/token? 
    code={auth_code}& 
    redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground& 
    client_id=#####.apps.googleusercontent.com& 
    client_secret=#####& 
    scope=& 
    grant_type=authorization_code 

Когда я пытаюсь выполнить этот запрос, я получаю сообщение ERROR 400 со следующим ответом:

{"error": "invalid_request", "error_description": "Invalid parameter value for redirect_uri: Missing scheme: {redirect_uri}} 

Он выдает сообщение об ошибке «Отсутствует схема» для redirect_uri. Это не странно, на мой взгляд, поскольку мой Тип приложения - «Другой», а вы не можете разрешить URI перенаправления с этим типом.

Я попытался OAuth2ForDevices (который точно что я хочу), но я не могу использовать это для таблиц Google.

Каков правильный способ получить refresh_token (и access_token) с использованием кода авторизации, полученного с помощью идентификатора клиента «Другое» (который можно использовать для электронных таблиц Google)?

ответ

4

Я понял.

Используйте этот запрос:

https://accounts.google.com/o/oauth2/v2/auth? 
    scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets& 
    redirect_uri=urn:ietf:wg:oauth:2.0:oob& 
    response_type=code& 
    client_id=#####.apps.googleusercontent.com 

Это возвращает код авторизации. Затем сделать следующий запрос POST:

POST /oauth2/v4/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code={auth_code}& 
client_id=######.apps.googleusercontent.com& 
client_secret=#####& 
redirect_uri=urn:ietf:wg:oauth:2.0:oob& 
grant_type=authorization_code 

Если вы не используете "урна: IETF: Рабочая группа OAuth: 2,0: OOB" в качестве redirect_uri, он не работает. Это не указано в OAuth2InstalledApp Guide (он использует «https://oauth2-login-demo.appspot.com/code» в качестве примера для redirect_uri, что меня смутило).

Короткий ответ: Использование "урна: IETF: Рабочая группа по OAuth: 2,0: OOB", как redirect_uri

0

Используйте тот же redirect_uri вы использовали для вызова:

https://accounts.google.com/o/oauth2/v2/auth

Google не будет отправлять какие-либо дополнительные запросы на этот uri, но я полагаю, что он использует его для соответствия целям как небольшую добавленную безопасность.

Смежные вопросы