Аутентификация Google Oauth 2.0 для ограниченного устройства ввода не работает

Я пытаюсь использовать свое собственное Java-приложение для загрузки видео в мою учетную запись YouTube через устройство с ограниченным доступом, такое как Raspberry pi, работающее в качестве сервера.

Для этого я использую Google Oauth 2.0 для ограниченного устройства ввода в качестве ссылка.

Здесь я столкнулся со следующей проблемой:

  1. # P4 #
    POST /o/oauth2/device/code HTTP/1.1
    Host: accounts.google.com
    Content-Type: application/x-www-form-urlencoded
    
    client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&
    scope=https://www.googleapis.com/auth/youtube
    
  2. # P5 #
    # P6 #
  3. Теперь я даю необходимое разрешение, открывая URL-адрес в ответ на запрос сервера Google.

  4. Наконец, я пытаюсь получить токен доступа с сервера Google (шаг 4 по ссылке), отправив аналогичный запрос:

POST /o/oauth2/token HTTP/1.1    
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&
client_secret=hDBmMRhz7eJRsM9Z2q1oFBSem&
code=4/YMSlR3fSCC1NtUh073DuZKTJJ3ss&
grant_type=http://oauth.net/grant_type/device/1.0

но вместо ответа 'access_token' я получаю следующее:

Status Code:400 Response: {   "error" : "invalid_request", 
"error_description" : "Required parameter is missing: grant_type" }

Примечание. С кодировкой URL-адреса или без нее моя проблема остается прежней.

Может ли кто-нибудь помочь мне узнать, не работает ли API Google Oauth 2.0 или мой запрос ошибочен?

************************************** ОБНОВЛЕНИЕ ******* ******************************

Я попробовал те же шаги с некоторыми альтернативными инструментами вместо своего собственного Java-приложения, поэтому я попробовал Fiddler и curl, сюрприз заключается в следующем:

  1. Все вызовы работали правильно, как указано в Google Oauth 2.0 для ограниченного устройства ввода для локона.

  2. С Fiddler наблюдалась такая же проблема, как и с моим пользовательским Java-приложением.

Я все еще не могу понять разницу, мне все еще нужна помощь.

************ ОБНОВЛЕНИЕ № 2 **************

Запрос скрипача:

(URL закодирован, секрет клиента скрыт)

(Можно получить учетные данные oauth (client_id и client_secret), выполнив это)

POST HTTP/1.1
https://accounts.google.com/o/oauth2/token?client_id=308065994473-ur9dd7003ajs6mvr5s4kqnugr6j8tsf2.apps.googleusercontent.com&client_secret=XXXXXXXXXXXXXXX&code=4%2FWR-qiTquqB0e4-0LCy0-7rZ2kkE2&grant_type=http%3A%2F%2Foauth.net%2Fgrant_type%2Fdevice%2F1.0

Content-Type: application/x-www-form-urlencoded

(URL-адрес не закодирован, секрет клиента скрыт)

POST HTTP/1.1
https://accounts.google.com/o/oauth2/token?client_id=308065994473-ur9dd7003ajs6mvr5s4kqnugr6j8tsf2.apps.googleusercontent.com&client_secret=XXXXXXXXXXXXXX&code=4/WR-qiTquqB0e4-0LCy0-7rZ2kkE2&grant_type=http://oauth.net/grant_type/device/1.0

Проект кода Java доступен по адресу (проект maven, проверьте тестовый пример для вызовов Oauth):

https://docs.google.com/file/d/0B8ltWBtPF-DVMDZFNHNMZXpCQlk


person Ashish Sharma    schedule 22.06.2014    source источник


Ответы (1)


Значение неверно, вы должны использовать grant_type=authorization_code, как здесь.

person Owen Cao    schedule 23.06.2014
comment
Пробовал ваше предложение, все та же проблема. - person Ashish Sharma; 23.06.2014
comment
Удалите разрыв строки в данных публикации, поэтому используйте client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&client_secret=hDBmMRhz7eJRsM9Z2q1oFBSem&code=4/YMSlR3fSCC1NtUh073DuZKTJJ3ss&grant_type=authorization_code&redirect_uri=your_encoded_redirectURI - person Owen Cao; 23.06.2014
comment
Вызовы работали нормально, как и в справочном документе Google, когда я использовал curl, но он не работает, когда я использую fiddler или свое пользовательское приложение java, я обновил вопрос, пожалуйста, посмотрите. - person Ashish Sharma; 24.06.2014
comment
Пожалуйста, проверьте Обновление №2 в вопросе. - person Ashish Sharma; 25.06.2014
comment
Добавлю java-код на подходящий форум и предоставлю ссылку. - person Ashish Sharma; 25.06.2014
comment
Неверный код Java, вы не должны добавлять параметры в путь запроса, установите параметры в Entity как thishttpPost.setEntity(new UrlEncodedFormEntity(parameters)); - person Owen Cao; 26.06.2014