一次性代码交换刷新令牌时,Google OAuth redirect_uri_mismatch

时间:2019-03-18 13:28:01

标签: java scala google-oauth2

我正在实现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错误的请求{“ error”:“ redirect_uri_mismatch”,“ error_description”:“错误的请求”}

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

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

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

  

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

我什至尝试发送实际的“引荐来源”网址。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

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

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

如果将重定向uri设置为"postmessage",那么它应该对您有用。