Como otros han mencionado, puede enviar un GET a https://www.googleapis.com/oauth2/v3/userinfo, usando el portador OAuth2 de token que acaba de recibir, y obtendrá una respuesta con un poco de información sobre el usuario (identificación, nombre, etc.).
También vale la pena mencionar que Google implementa OpenID Connect y que este punto final de información del usuario es solo una parte de él.
OpenID Connect es una capa de autenticación en la parte superior de OAuth2. Al intercambiar una autorización code
en el punto final del token de Google, se obtiene un token de acceso (el parámetro access_token
), así como un token de ID de OpenID Connect (el parámetro id_token
).
Ambos estos tokens son JWT (JSON Token web, http://tools.ietf.org/html/draft-ietf-oauth-json-web-token).
Si las decodifica, obtendrá algunas afirmaciones, incluida la id del usuario. Si vincula este ID a un usuario en su base de datos, puede identificarlos inmediatamente sin tener que hacer una GET extra de userinfo (ahorra tiempo).
Como se menciona en los comentarios, estos tokens están firmados con la clave privada de Google y es posible que desee verificar la firma mediante la clave pública de Google (https://www.googleapis.com/oauth2/v3/certs) para asegurarse de que sean auténticos.
Puede ver lo que hay en un JWT pegándolo en https://jwt.io/ (desplácese hacia abajo para el depurador JWT). Las afirmaciones se ven algo como:
{
"iss":"accounts.google.com",
"id":"1625346125341653",
"cid":"8932346534566-hoaf42fgdfgie1lm5nnl5675g7f167ovk8.apps.googleusercontent.com",
"aud":"8932346534566-hoaf42fgdfgie1lm5nnl5675g7f167ovk8.apps.googleusercontent.com",
"token_hash":"WQfLjdG1mDJHgJutmkjhKDCdA",
"iat":1567923785,
"exp":1350926995
}
También hay bibliotecas para varios lenguajes de programación para decodificar programáticamente JWTs.
PS: para obtener una lista actualizada de las URL y las funciones admitidas por el proveedor de OpenID Connect de Google, puede verificar esa URL: https://accounts.google.com/.well-known/openid-configuration.
Tenga en cuenta que Google ha cambiado recientemente la respuesta y que 'id_token' ahora contiene el identificador estático en la clave' sub' en lugar de la clave 'id' como en el ejemplo anterior. AFAIK, este cambio es su interpretación del protocolo OpenID Connect. Desafortunadamente, mientras escribo esto, las respuestas parecen un tanto aleatorias: a veces es 'id' y a veces es' sub', así que necesito apoyar ambas. –