La vinculación de Cuentas de Google permite que los titulares de Cuentas de Google se conecten de manera rápida, fluida y segura a sus servicios y compartan datos con Google.
El Acceso con una cuenta vinculada habilita el Acceso con One Tap con Google para los usuarios que ya tienen vinculada su Cuenta de Google a tu servicio. Esto mejora la experiencia de los usuarios, ya que podrán acceder con un clic sin necesidad de volver a ingresar el nombre de usuario y la contraseña. También reduce las posibilidades de que los usuarios creen cuentas duplicadas en tu servicio.
Requisitos
Para implementar el acceso con una cuenta vinculada, debes cumplir con los siguientes requisitos:
- Tienes una implementación de vinculación de OAuth de la Cuenta de Google que admite el flujo de código de autorización de OAuth 2.0. Tu implementación de OAuth debe incluir los siguientes extremos:
- extremo de autorización para controlar las solicitudes de autorización.
- Extremo del token para controlar las solicitudes de acceso y los tokens de actualización.
- El extremo de userinfo para recuperar información básica de la cuenta sobre el usuario vinculado que se le muestra durante el proceso de acceso a la cuenta vinculada.
- Tienes una app para Android.
Cómo funciona
Requisito previo : El usuario vinculó previamente su Cuenta de Google con la cuenta en tu servicio.
- Aceptas que se muestren las cuentas vinculadas durante el flujo de acceso con One Tap.
- Se le muestra al usuario un mensaje de acceso con One Tap con la opción de acceder a tu servicio con su cuenta vinculada.
- Si el usuario decide continuar con la cuenta vinculada, Google enviará una solicitud al extremo del token para guardar un código de autorización. La solicitud contiene el token de acceso del usuario y un código de autorización de Google.
- Intercambia el código de autorización de Google por un token de ID de Google que contiene información sobre la Cuenta de Google del usuario.
- Tu app también recibe un token de ID cuando finaliza el flujo y lo haces coincidir con el identificador de usuario en el token de ID que recibió tu servidor para que el usuario acceda a tu app.

Implementa el acceso con cuenta vinculada en tu app para Android
Para admitir el acceso a la cuenta vinculada en tu app para Android, sigue las instrucciones de la guía de implementación de Android.
Administra solicitudes de código de autorización de Google
Google realiza una solicitud POST a tu extremo del token para guardar un código de autorización que puedes intercambiar por el token de ID del usuario. La solicitud contiene el token de acceso del usuario y un código de autorización OAuth2 emitido por Google.
Antes de guardar el código de autorización, debes verificar que Google te haya otorgado el token de acceso, identificado con la client_id
.
Solicitud HTTP
Solicitud de muestra
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN
Tu extremo de intercambio de tokens debe poder manejar los siguientes parámetros de solicitud:
Parámetros del extremo del token | |
---|---|
code |
Obligatorio: Código de autorización de Google OAuth2 |
client_id |
ID de cliente obligatorio que enviaste a Google |
client_secret |
Secreto de cliente obligatorio que enviaste a Google |
access_token |
Obligatorio Es el token de acceso que emitió a Google. Usarás esto para conocer el contexto del usuario |
grant_type |
El valor obligatorio DEBE establecerse en urn:ietf:params:oauth:grant-type:reciprocal |
El extremo del intercambio de tokens debería responder a la solicitud POST de la siguiente manera:
- Verifica que
access_token
se le haya otorgado a Google el documentoclient_id
. - Responde con una respuesta HTTP 200 (OK) si la solicitud es válida y el código de Auth se intercambia correctamente por un token de ID de Google, o bien un código de error HTTP si la solicitud no es válida.
Respuesta HTTP
Listo
Código de estado HTTP 200 correcto
Ejemplo de respuesta exitosa
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
Errores
En el caso de una solicitud HTTP no válida, responde con uno de los siguientes códigos de error HTTP:
Código de estado HTTP | Cuerpo | Descripción |
---|---|---|
400 | {"error": "invalid_request"} |
Falta un parámetro en la solicitud, por lo que el servidor no puede continuar con ella. También se puede mostrar si la solicitud incluye un parámetro no admitido o repite un parámetro. |
401 | {"error": "invalid_request"} |
Falló la autenticación del cliente, por ejemplo, si la solicitud contiene un ID o secreto de cliente no válido. |
401 | {"error": "invalid_token"}
Incluir el desafío Wauth-Authentication: Bearer auth en el encabezado de la respuesta |
El token de acceso de socio no es válido. |
403 | {"error": "insufficient_permission"}
Incluir el desafío Wauth-Authentication: Bearer auth en el encabezado de la respuesta |
El token de acceso de socio no contiene los permisos necesarios para realizar la OAuth recíproca. |
500 | {"error": "internal_error"} |
Error de servidor |
La respuesta de error debe contener los siguientes campos :
Campos de respuesta de error | |
---|---|
error |
String de error obligatoria |
error_description |
Descripción legible del error |
error_uri |
URI que proporciona más detalles sobre el error |
Respuesta de muestra del error 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_request",
"error_description": "Request was missing the 'access_token' parameter."
}
Código de autorización de Ad Exchange para token de ID
Deberá cambiar el código de autorización que recibió por un token de ID de Google que contiene información sobre la Cuenta de Google del usuario.
Para intercambiar un código de autorización por un token de ID de Google, llama al extremo https://oauth2.googleapis.com/token
y configura los siguientes parámetros:
Campos de las solicitudes | |
---|---|
client_id |
Obligatorio: El ID de cliente obtenido de la página Credenciales de la Consola de API. Por lo general, será la credencial con el nombre New Actions on Google App |
client_secret |
Obligatorio: El secreto de cliente obtenido de la página Credenciales de la Consola de API |
code |
Obligatorio: El código de autorización enviado en la solicitud inicial |
grant_type |
Obligatorio Como se define en la especificación de OAuth 2.0, el valor de este campo se debe establecer en authorization_code . |
Solicitud de muestra
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET
Google responde a esta solicitud mostrando un objeto JSON que contiene un token de acceso de corta duración y un token de actualización.
La respuesta contiene los siguientes campos:
Campos de respuesta | |
---|---|
access_token |
Token de acceso emitido por Google que tu aplicación envía para autorizar una solicitud a la API de Google |
id_token |
El token de ID contiene la información de la Cuenta de Google del usuario. La sección Valida la respuesta contiene detalles sobre cómo decodificar y validar la respuesta del token de ID. |
expires_in |
El ciclo de vida restante del token de acceso en segundos |
refresh_token |
Un token que puedes usar para obtener un nuevo token de acceso. Los tokens de actualización son válidos hasta que el usuario revoca el acceso |
scope |
El valor de este campo siempre está configurado como openid para el caso de uso de Acceso con cuenta vinculada |
token_type |
El tipo de token que se muestra. En este momento, el valor de este campo siempre es Bearer |
Respuesta de muestra
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8
{
"access_token": "Google-access-token",
"id_token": "Google-ID-token",
"expires_in": 3599,
"token_type": "Bearer",
"scope": "openid",
"refresh_token": "Google-refresh-token"
}
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret
Cómo validar la respuesta del token de ID
Validar y decodificar la aserción JWT
Puede validar y decodificar la aserción JWT utilizando una biblioteca de decodificación JWT para su idioma . Utilice las claves públicas de Google, disponibles en formatos JWK o PEM , para verificar la firma del token.
Cuando se decodifica, la aserción JWT se parece al siguiente ejemplo:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
Además de verificar la firma del token, verifique que el emisor de la afirmación (campo iss
) sea https://accounts.google.com
, que la audiencia (campo aud
) sea su ID de cliente asignado y que el token no haya caducado ( exp
campo).
Con los campos email
, email_verified
y hd
puede determinar si Google aloja y tiene autoridad para una dirección de correo electrónico. En los casos en que Google tiene autoridad, se sabe que el usuario es el propietario legítimo de la cuenta y puede omitir la contraseña u otros métodos de desafío. De lo contrario, estos métodos se pueden utilizar para verificar la cuenta antes de vincularla.
Casos en los que Google tiene autoridad:
-
email
tiene un sufijo@gmail.com
, esta es una cuenta de Gmail. -
email_verified
es verdadero yhd
está configurado, esta es una cuenta de G Suite.
Los usuarios pueden registrarse para obtener cuentas de Google sin usar Gmail o G Suite. Cuando el email
no contiene un sufijo @gmail.com
y no hay hd
Google no tiene autoridad y se recomienda utilizar una contraseña u otros métodos de desafío para verificar al usuario. email_verfied
también puede ser cierto ya que Google verificó inicialmente al usuario cuando se creó la cuenta de Google, sin embargo, la propiedad de la cuenta de correo electrónico de terceros puede haber cambiado desde entonces.