Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 交换刷新令牌的一次性代码时Google OAuth重定向uri不匹配_Java_Scala_Google Oauth - Fatal编程技术网

Java 交换刷新令牌的一次性代码时Google OAuth重定向uri不匹配

Java 交换刷新令牌的一次性代码时Google OAuth重定向uri不匹配,java,scala,google-oauth,Java,Scala,Google Oauth,我正在实现Google OAuth2服务器一次性代码流,如下所述: 客户端从google获得代码(在用户完成oauth流之后), 并将其发布到服务器 服务器尝试使用以下调用将代码交换为刷新令牌(使用Java SDK): val authorizationScopes = Seq(GmailScopes.GMAIL_READONLY, GmailScopes.GMAIL_SEND, "email").asJavaCollection val googleAuthorizationCodeFlo

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

客户端从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错误请求{“错误”:“重定向uri不匹配”,“错误描述”:“错误请求”}

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

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

我尝试发送一个空的重定向URI(正如我在一些关于此事的回答中所看到的),但结果是:

com.google.api.client.auth.oauth2.TokenResponseException:400错误请求{“错误”:“缺少必需参数:重定向\u uri”,“错误\u描述”:“错误请求”}

我甚至尝试发送实际的“referer”url


这里我做错了什么?

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

SDK打开一个新窗口,并使用post消息与之通信


如果您将重定向uri设置为“postmessage”,它应该适合您。

我已经花了几个小时寻找如何解决这个问题。您的解决方案是唯一有效的解决方案!谢谢