Конечные точки OAuth для Google App Engine, добавившие 400 в производство - PullRequest
16 голосов
/ 09 мая 2011

Я реализовал экспериментальную поддержку OAuth для Google App Engine, используя Python, и он работает локально, но конечные точки выдают 400 при развертывании в appspot.

Например, URL http (s): //my-app.appspot.com/_ah/OAuthGetRequestToken возвращает 400, но локально этот шаблон URL ведет себя так, как ожидается.

Я пробовал http и https и предположил, что appspot обрабатывает ssl-сертификат.

ОБНОВЛЕНИЕ

Я использовал OAuth Playground для проверки моего кода.Несмотря на документацию, кажется, что для регистрации вашего приложения требуется .Зайдите сюда для получения инструкций о том, как зарегистрироваться.Согласно документации в процессе регистрации, сертификат не требуется при работе в App Engine.Детская площадка показывает более подробно об ошибке - «подпись неверна».Если я правильно понимаю, подпись производится из базовой строки подписи.В этом случае я использую базовую строку 7DYB6MJ2s-IQcd7VJYJUmcct.

GET /accounts/OAuthGetRequestToken?scope=https%3A%2F%2Fmail.google.com%2Fmail%2Ffeed%2Fatom HTTP/1.1
Host: www.google.com
Accept: */*
Authorization: OAuth oauth_version="1.0", oauth_nonce="168cfd60a93a46caa38dddfdcedd9de9", oauth_timestamp="1305315895", oauth_consumer_key="xxxxxxx.appspot.com", oauth_callback="http%3A%2F%2Fgooglecodesamples.com%2Foauth_playground%2Findex.php", oauth_signature_method="HMAC-SHA1", oauth_signature="4J5faUujE0VNaybyvFCiEPY7DQ8%3D"

HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=UTF-8
Date: Fri, 13 May 2011 19:44:55 GMT
Expires: Fri, 13 May 2011 19:44:55 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Length: 451
Server: GSE

**signature_invalid**
base_string:GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken&oauth_callback%3Dhttp%253A%252F%252Fgooglecodesamples.com%252Foauth_playground%252Findex.php%26oauth_consumer_key%3Dxxxxxx.appspot.com%26oauth_nonce%3D168cf60a94caa38e2defdcedd9de9%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1305315895%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fmail.google.com%252Fmail%252Ffeed%252Fatom

FINAL UPDATE

Существовали две вещи, вызывающие 400. Во-первых, приложение не былозарегистрировано.Документация Google гласит, что это необязательно, но это не так, по-видимому.Во-вторых, Запрос не был должным образом подписан. Вот отличный инструмент отладки для проверки ваших запросов OAuth: Oauth Playground

Ответы [ 3 ]

4 голосов
/ 13 мая 2011

Вы должны зарегистрировать свой домен, чтобы OAuth работал на производстве.

Хотя в следующих документах указано, что регистрация является необязательной: http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html

Не работает без регистрациис января.

Посмотрите на ссылку выше и зарегистрируйте свой домен / приложение.Вам не нужно предоставлять сертификат, это по-прежнему необязательно.

0 голосов
/ 13 мая 2011

Сначала убедитесь, что вы включили федеративный вход в настройках приложения.

screenshot admin panel

Из вашего описания может показаться, что вы могли бы просто выполнить прямой GETзапрос к /_ah/OAuthGetRequestToken без каких-либо других обязательных параметров oAuth.Это будет работать на dev_appserver, так как это просто макет oAuth, который позволит вам уточнить ваш код.

См. Параметры, перечисленные на странице описания OAuthGetRequestToken , чтобы узнать, что требуется и какиметь дело с подписанием.Я думаю, что вы можете игнорировать scope для GAE, хотя

0 голосов
/ 10 мая 2011

Какой это метод запроса? В dev_appserver_oauth.py вижу:

if method != 'GET' and method != 'POST':
  outfile.write('Status: 400\r\n')
  return

Так что он будет работать только для GET или POST запросов.

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