【发布时间】: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