es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Debug mode mostrando que el valor para el id_token está almacenado

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.

Tags:  , , ,

Answer

  1. Avatar for 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 el id_token se descarta al construir el objeto UserCredentials. El autor desea obtener el id_token para obtener toda la información del usuario en una sola solicitud. Intentaron usar el método idTokenWithAudience(), pero no contiene todos los datos requeridos.

Comments are closed.