googleapis / googleapis/google-cloud-java

[google-auth-library-java] UserAuthorizer is discarding the id_token after successful authorization code exchange

Abierto
#12,606 1 comentario 0 reacciones 1 asignado Reclamado por @TimurSadykov Ver en GitHub
type: feature request
Lenguaje dominante
Java
Estrellas
2.1k
Forks
1.2k
Merge medio
1 d 23 h
PR fusionados (30 d)
154

Descripción

I'm trying to get data from the `id_token` which is returned when exchanging an authorization code with the token endpoint.

I have everything I need to make the request to the endpoint manually. However, this is very verbose and feels like re-inventing the wheel. It got me thinking that there must be a way to get this data using the classes provided by the library.

Currently I am using the `com.google.auth.oauth2.UserAuthorizer` class to build up a request for the exchange of information.

```
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)
```

The internals of `getCredentialsFromCode()` parses the response and it contains all the tokens. Including the `id_token` but, it gets discarded when constructing the `UserCredentials` object further down.

[![Debug mode showing that the value for id_token is stored][1]][1]

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

Regardless, I want to get this value so I can know basic information about the user such as their name, birthday and email address from a single request.

There does exist a method called `idTokenWithAudience()` which returns a Google ID Token from the refresh token response. If I call this, I get a token back that doesn't contain all the data that was available in the identically named `id_token` mentioned earlier making it a no-go either.

[1]: https://i.stack.imgur.com/zSMvN.png

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.