将一次性代码交换为刷新令牌时出现 Google OAuth redirect_uri_mismatch

Dav*_*aks 5 java scala google-oauth

我正在实现 Google OAuth2 服务器一次性代码流程,如下所述:

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

客户端从 google 获取代码(在用户完成 oauth 流程后),并将其 POST 到服务器。

服务器尝试使用以下调用将代码交换为刷新令牌(使用 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()
Run Code Online (Sandbox Code Playgroud)

我得到:

com.google.api.client.auth.oauth2.TokenResponseException:400错误请求{“错误”:“redirect_uri_mismatch”,“error_description”:“错误请求”}

该redirectUri与Google云控制台>凭据>客户端ID(Web应用程序)>授权重定向URI中的完全相同。

此外,当我们使用 OAuth 重定向流程时它已经可以工作,但是当我们切换到 POST 流程时,它就停止处理此消息。

我尝试发送一个空的redirectUri(正如我在有关此事的一些答案中看到的那样),但我得到:

com.google.api.client.auth.oauth2.TokenResponseException:400错误请求{“错误”:“缺少必需参数:redirect_uri”,“error_description”:“错误请求”}

我什至尝试发送实际的“referer”网址。

我在这里做错了什么?

Boa*_*oaz 13

它没有记录,但当您使用 Google 客户端 SDK 时,您不会重定向。

SDK 打开一个新窗口并使用 post 消息与其进行通信。

如果您设置重定向 uri,"postmessage"它应该适合您。

  • 我花了几个小时寻找如何解决这个问题。您的解决方案是唯一有效的解决方案!谢谢。 (3认同)