【问题标题】:How does one get the id_token using Google's OAuth2 Java Api?如何使用 Google 的 OAuth2 Java Api 获得 id_token?
【发布时间】:2022-01-06 20:19:20
【问题描述】:

我正在努力了解 Google 提供的 OAuth2 Java library

我拥有使用 Springs 内置 WebClient 手动向 Google 令牌端点发出请求所需的一切。但是,这非常冗长,感觉就像在重新发明轮子。这让我想到必须有一种方法可以使用库提供的类来获取这些数据。对吧?

目前我正在使用com.google.auth.oauth2.UserAuthorizer 类来构建信息交换请求。

val userCredentials: UserCredentials = UserAuthorizer.newBuilder()
  .setClientId(googleOauthConfig.clientId)
  .setTokenStore(tokenStore)
  .setScopes(googleOauthConfig.scopes)
  .setTokenServerUri(URI.create("https://oauth2.googleapis.com/token"))
  .setCallbackUri(redirectUri)
  .build()
  .getCredentialsFromCode(authorizationCode, redirectUri)

getCredentialsFromCode() 的内部解析响应并包含所有标记。包括id_token,但是在进一步构建UserCredentials对象时会被丢弃。

return UserCredentials.newBuilder()
  .setClientId(clientId.getClientId())
  .setClientSecret(clientId.getClientSecret())
  .setRefreshToken(refreshToken)
  .setAccessToken(accessToken)
  .setHttpTransportFactory(transportFactory)
  .setTokenServerUri(tokenServerUri)
  .build(); // no mention of id_token

无论如何,我想获取此值,以便我可以通过单个请求了解有关用户的基本信息,例如他们的姓名、生日和电子邮件地址。

确实存在一个名为 idTokenWithAudience() 的方法,它从刷新令牌响应中返回一个 Google ID 令牌。如果我调用它,我会返回一个令牌,其中不包含前面提到的同名 id_token 中可用的所有数据,因此也不行。

【问题讨论】:

    标签: java google-api google-oauth google-oauth-java-client


    【解决方案1】:

    您可以使用IdTokenCredentials 访问 ID 令牌,如下所示:

    var credentials = UserCredentials.newBuilder()
            .setClientId("...")
            .setClientSecret("...")
            .setRefreshToken("...")
            .build()
            .createScoped("openid email");
    
    var idToken = IdTokenCredentials
            .newBuilder()
            .setIdTokenProvider((IdTokenProvider)credentials)
            .build();
    
    idToken.refresh();
    System.out.println(idToken.getIdToken().getTokenValue());
    

    【讨论】:

    • 感谢您的回答,但这不是我想要的。这种方法仍然会发出两个请求。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2019-03-23
    • 2016-10-26
    • 1970-01-01
    • 2016-01-13
    • 2016-10-25
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多