Я реализую поток одноразовых кодов сервера 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'.
Что я здесь не так делаю?