Google OAuth redirect_uri_mismatch при обмене одноразовым кодом для токена обновления - PullRequest
1 голос
/ 18 марта 2019

Я реализую поток одноразовых кодов сервера Google OAuth2, как описано здесь:

https://developers.google.com/identity/sign-in/web/server-side-flow

Клиент получает код от Google (после того, как пользователь завершит выполнение oauth), и отправляет его на сервер.

Сервер пытается обменять код на токен обновления (используя Java SDK), используя этот вызов:

val authorizationScopes = Seq(GmailScopes.GMAIL_READONLY, GmailScopes.GMAIL_SEND, "email").asJavaCollection

val googleAuthorizationCodeFlow = new GoogleAuthorizationCodeFlow.Builder(
      GoogleNetHttpTransport.newTrustedTransport(),
      JacksonFactory.getDefaultInstance,
      googleAppInfo.googleClientId,
      googleAppInfo.googleClientSecret,
      authorizationScopes)
  .setTokenServerUrl(new GenericUrl(googleAppInfo.tokenServerUrl))
  .setAccessType("offline")
  .build()

val googleTokenResponse: GoogleTokenResponse = googleAuthorizationCodeFlow
  .newTokenRequest(code)
  .setRedirectUri(redirectUri)
  .execute()

Я получаю:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request {"error": "redirect_uri_mismatch", "error_description": "Bad Request"}

Значение redirectUri точно такое же, как в облачной консоли Google> Учетные данные> Идентификатор клиента (веб-приложение)> URI авторизованного перенаправления.

Кроме того, он уже работал, когда мы использовали поток перенаправления OAuth, но когда мы переключились на поток POST, он перестал работать с этим сообщением.

Я попытался отправить пустой redirectUri (как я видел в некоторых ответах по этому вопросу), но я получаю:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request {"error": "Отсутствует обязательный параметр: redirect_uri", "error_description": "Bad Request"}

Я даже пытался отправить реальный URL 'referer'.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 18 марта 2019

Это не задокументировано, но при работе с клиентским SDK Google вы не перенаправляете.

SDK открывает новые окна и связывается с ним с помощью почтового сообщения.

Если вы установилиперенаправить URI как "postmessage", он должен работать для вас.

...