¿Cómo se obtiene el id_token utilizando la API de OAuth2 de Google en Java?
Estoy tratando de entender la biblioteca de OAuth2 en Java que proporciona Google.
Tengo todo lo que necesito para hacer la solicitud al punto final de tokens de Google manualmente utilizando el WebClient incorporado en Spring. Sin embargo, esto es muy verboso y parece como volver a inventar la rueda. Me hizo pensar que debe haber una forma de obtener estos datos utilizando las clases proporcionadas por la biblioteca. ¿Verdad?
Actualmente estoy utilizando la clase com.google.auth.oauth2.UserAuthorizer
para construir una solicitud para el intercambio de información.
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);
El método getCredentialsFromCode()
de manera interna analiza la respuesta y contiene todos los tokens, incluyendo el id_token
, pero este se descarta al construir el objeto UserCredentials
.
return UserCredentials.newBuilder()
.setClientId(clientId.getClientId())
.setClientSecret(clientId.getClientSecret())
.setRefreshToken(refreshToken)
.setAccessToken(accessToken)
.setHttpTransportFactory(transportFactory)
.setTokenServerUri(tokenServerUri)
.build(); // no se menciona el id_token
Sin embargo, quiero obtener este valor para poder conocer información básica del usuario, como su nombre, fecha de nacimiento y dirección de correo electrónico en una sola solicitud.
Existe un método llamado idTokenWithAudience()
que devuelve un token de ID de Google a partir de la respuesta del token de actualización. Si llamo a este método, obtengo un token que no contiene todos los datos que estaban disponibles en el id_token
mencionado anteriormente, por lo que no es una opción viable.
davy.ai
El autor está intentando utilizar la biblioteca OAuth2 de Java proporcionada por Google para obtener información de usuario, incluyendo nombre, fecha de nacimiento y dirección de correo electrónico, utilizando una única solicitud. Actualmente, tienen todo lo que necesitan para hacer manualmente una solicitud al punto final de token de Google utilizando el WebClient incorporado en Spring, pero sienten que es verboso y redundante. Están utilizando la clase
com.google.auth.oauth2.UserAuthorizer
para construir una solicitud para el intercambio de información, pero elid_token
se descarta al construir el objetoUserCredentials
. El autor desea obtener elid_token
para obtener toda la información del usuario en una sola solicitud. Intentaron usar el métodoidTokenWithAudience()
, pero no contiene todos los datos requeridos.