2014-01-24 4 views
1

Я пишу приложение на стороне клиента Java, которому необходимо получить доступ к API-интерфейсу Google. Я следую инструкциям со страницы https://developers.google.com/accounts/docs/OAuth2InstalledApp, и мне удалось получить код авторизации. Однако, когда я пытаюсь получить токен доступа, я получаю ошибку 400 «Плохой запрос».Ошибка 401, запрашивающая токен доступа от Google с помощью Oauth2

Я тестировал с помощью дополнения плаката для Firefox. Я посылаю запрос на запись к https://accounts.google.com/o/oauth2/token с содержанием:

code=<the-code-i-got-in-step1>& 
client_id=1097620474561-gusvm8cq428h86r7pcum285cuffssncj.apps.googleusercontent.com& 
client_secret=,my-client-secret>& 
redirect_uri=hurn:ietf:wg:oauth:2.0:oob& 
grant_type=authorization_code 

Любые предложения о том, что я могу делать неправильно?

+0

следа фактического HTTP вашего приложение посылает. Затем перейдите на Oauth Playground и выполните эквивалентные шаги там, отметив http-запросы. Сравните эти два. Это может быть так же просто, как URL-идентификация параметров. – pinoyyid

+0

Я смог закончить игру на площадке OAUTH, так что, по крайней мере, я могу видеть, как будет выглядеть успешный ответ, но я все еще не могу получить свой собственный идентификатор клиента. К сожалению, я не могу отслеживать сеанс HTTP с помощью wirehark, потому что он использует HTTPS. –

+0

В Oauth Playground, если вы щелкнете значок шестеренки, вы можете ввести собственные учетные данные своего клиента. Попробуйте это, чтобы устранить проблему, связанную с кодированием, или проблему с настройкой. – pinoyyid

ответ

0

Если это 400-ошибки (а не 401 - оба кода упоминается в вашем вопросе), то это, скорее всего, запрос имеет неверный формат, проверьте общие HTTP вещи, такие как:

  1. Убедитесь, что это POST - и что у вас есть данные как тело, а не как строка запроса.
  2. Контент-длина установлена.
  3. Content-Type установлен в application/x-www-form-urlencoded.
  4. Каждый параметр формы фактически urlencoded

Я бы предложил сделать использование Google при условии клиентские библиотеки, где это возможно, пример для установленного приложения на стороне клиента можно найти здесь: https://code.google.com/p/google-api-java-client/wiki/OAuth2#Installed_Applications

+0

Я определенно делаю POST с данными в теле, а не как строку запроса. Тип контента установлен в application/x-www-form-urlencoded, а Content-Length автоматически устанавливается надстройкой плаката. –

+0

Yesyerday Я получал ошибку 401 (ссылка на ошибку 400 была опечаткой), но когда я снова попробую сегодня, я получаю код ошибки 404 - не найден. –

+0

Я узнал, что я неправильно кодировал URL-адрес одного из моих параметров. Когда я исправил это, я все равно получаю сообщение об ошибке, но он отличается. Я получаю HTTP-код = 400 и ошибку JSON «Invalid Grant». –

1

I в конце концов понял это. Я не был явным указание автономного доступа требуется при принятии первоначального запроса кода, как описано здесь invalid_grant trying to get oAuth token from google

Спасибо всем, кто помог мне с этим вопросом

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