Ошибка при обмене кода для Oauth

Внезапно я получаю сообщение об ошибке во время процесса Oauth после того, как моему приложению было предоставлено разрешение на доступ пользователем, и код авторизации доставляется на мой URL-адрес перенаправления. Я использую один и тот же код уже пару недель, и он работает нормально. Я почти уверен, что не вносил никаких изменений.

Есть ли проблема с Google Drive API сегодня?

Ошибка возникает здесь, в коде Python:

credentials = flow.step2_exchange(authorization_code)

Сообщение об ошибке:

FlowExchangeError: Invalid response 400.

Весь метод exchange_code скопирован из примера Google:

def exchange_code(authorization_code):
  """Exchange an authorization code for OAuth 2.0 credentials.

  Args:
    authorization_code: Authorization code to exchange for OAuth 2.0
                    credentials.
  Returns:
    oauth2client.client.OAuth2Credentials instance.
  Raises:
    CodeExchangeException: an error occurred.


  """

  logging.debug(authorization_code);

  flow = flow_from_clientsecrets(CLIENTSECRETS_LOCATION, ' '.join(SCOPES))

  flow.redirect_uri = REDIRECT_URI


  try:
    credentials = flow.step2_exchange(authorization_code)
    return credentials
  except FlowExchangeError, error:
    logging.error('An error occurred: %s', error)
    raise CodeExchangeException(None)

Используя Oauth Playground, я получаю следующий ответ об ошибке:

HTTP/1.1 400 Ok
Status: 400
Content-length: 37
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
X-google-cache-control: remote-fetch
-content-encoding: gzip
Server: GSE
Via: HTTP/1.1 GWA
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Fri, 10 Aug 2012 03:23:54 GMT
X-frame-options: SAMEORIGIN
Content-type: application/json
 Expires: Fri, 01 Jan 1990 00:00:00 GMT
{
  "error" : "unauthorized_client"
}

Есть идеи, почему это могло начать происходить, когда код работал неделями, как сейчас?

Спасибо, Крис


person user1501783    schedule 09.08.2012    source источник


Ответы (2)


Код ответа HTTP 400 означает, что ваш запрос каким-то образом недействителен, и должно быть более описательное сообщение об ошибке, сообщающее вам, что не так.

Возможно, библиотека Python скрывает полное сообщение, я бы рекомендовал вам попробовать тот же запрос с игровой площадкой OAuth 2.0 и сравнить его со своим:

https://code.google.com/oauthplayground/

person Claudio Cherubino    schedule 10.08.2012
comment
Спасибо, Клаудио, я отредактировал вопрос, чтобы показать ответ на игровой площадке OAuth 2.0. - person user1501783; 10.08.2012
comment
Можете ли вы также добавить запрос? Не стесняйтесь удалять конфиденциальные данные - person Claudio Cherubino; 10.08.2012
comment
Я не знаю, как показать фактический запрос, кроме строки, которая не работает, которая указана первой выше: учетные данные = поток.шаг2_обмен(авторизация_код). Я предполагаю, что «поток» определен в одном из импортов: from oauth2client.client import FlowExchangeError. из oauth2client.client импортировать AccessTokenRefreshError. из oauth2client.client import Credentials... можете ли вы сказать мне, как увидеть фактически отправленный запрос? - person user1501783; 10.08.2012
comment
Весь код, который я здесь использую, взят из примеров из документации Google. - person user1501783; 10.08.2012
comment
пока я давал информацию о том, как получить более подробную информацию об ошибке, я не вижу, как был дан ответ на этот вопрос. Кто-нибудь знает, почему, исходя из вопроса, я вдруг получаю сообщение об ошибке в коде, который не менялся и работал неделями? - person user1501783; 12.08.2012

Наконец-то я смог снова заставить код работать. Я вернул версию приложения GAE к моей предыдущей версии. Oauth exchange_code снова заработал. Затем я вернул его к текущей версии на GAE, без каких-либо изменений в коде, и он продолжает работать.

Таким образом, процесс oauth перестал работать, когда я недавно создал новую версию в GAE без каких-либо изменений в коде. Чего это стоит.....

person user1501783    schedule 12.08.2012