La vinculación de Cuentas de Google permite que los titulares de Cuentas de Google se conecten a tus servicios de forma rápida, sencilla y segura, y compartan datos con Google.
El Acceso con Cuenta vinculada habilita el Acceso con One Tap con Google para los usuarios que ya tienen su Cuenta de Google vinculada a tu servicio. Esto mejora la experiencia de los usuarios, ya que pueden acceder con un clic, sin volver a ingresar su nombre de usuario y contraseña. También reduce las posibilidades de que los usuarios creen cuentas duplicadas en tu servicio.
Requisitos
Para implementar el Acceso con 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.
- token endpoint para controlar la solicitud de tokens de acceso y actualización.
- Extremo userinfo para recuperar información básica de la cuenta sobre el usuario vinculado que se le muestra al usuario durante el proceso de acceso con cuenta vinculada.
- Tienes una app para Android.
Cómo funciona
Requisito previo : El usuario vinculó previamente su Cuenta de Google con su cuenta en tu servicio.
- Aceptas mostrar las cuentas vinculadas durante el flujo de Acceso con un toque.
- Se le muestra al usuario un mensaje de Acceso con un toque con la opción de acceder a tu servicio con su cuenta vinculada.
- Si el usuario elige continuar con la cuenta vinculada, Google envía una solicitud a tu extremo de token para guardar un código de autorización. La solicitud contiene el token de acceso del usuario que emitió tu servicio y un código de autorización de Google.
- Intercambias 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 comparas con el identificador de usuario en el token de ID que recibió tu servidor para que el usuario acceda a tu app.
![Acceso a la cuenta vinculada](https://developer.android.google.cn/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=es-419)
Implementa el acceso con Cuenta vinculada en tu app para Android
Para admitir el acceso con Cuentas vinculadas en tu app para Android, sigue las instrucciones de la Guía de implementación para Android.
Controla las solicitudes de códigos de autorización de Google
Google realiza una solicitud POST a tu extremo de token para guardar un código de autorización que intercambias por el token de ID del usuario. La solicitud contiene el token de acceso del usuario y un código de autorización de OAuth2 emitido por Google.
Antes de guardar el código de autorización, debes verificar que le otorgaste el token de acceso a Google, identificado por 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 controlar los siguientes parámetros de solicitud:
Parámetros del extremo del token | |
---|---|
code |
Código de autorización de OAuth2 de Google obligatorio |
client_id |
ID de cliente obligatorio que le enviaste a Google |
client_secret |
Obligatorio: Secreto de cliente que emitiste a Google |
access_token |
Obligatorio: Es el token de acceso que emitiste a Google. La usarás para obtener el contexto del usuario. |
grant_type |
Obligatorio: El valor DEBE establecerse en urn:ietf:params:oauth:grant-type:reciprocal . |
Tu extremo de intercambio de tokens debe responder a la solicitud POST de la siguiente manera:
- Verifica que el
access_token
se haya otorgado a Google identificado por elclient_id
. - Responde con una respuesta HTTP 200 (OK) si la solicitud es válida y el código de autorización se cambia correctamente por un token de ID de Google, o bien con un código de error HTTP si la solicitud no es válida.
Respuesta HTTP
Listo
Devuelve el código de estado HTTP 200 OK
Ejemplo de respuesta correcta
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
Errores
En caso de que se produzca 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"} |
La autenticación del cliente falló, por ejemplo, si la solicitud contiene un ID o secreto de cliente no válido |
401 | {"error": "invalid_token"}
Incluye el desafío de autenticación "WWW-Authentication: Bearer" en el encabezado de respuesta |
El token de acceso del socio no es válido. |
403 | {"error": "insufficient_permission"}
Incluye el desafío de autenticación "WWW-Authentication: Bearer" en el encabezado de respuesta |
El token de acceso del socio no contiene los permisos necesarios para realizar el OAuth recíproco. |
500 | {"error": "internal_error"} |
Error del servidor |
La respuesta de error debe contener los siguientes campos :
Campos de respuesta de error | |
---|---|
error |
Cadena de error obligatoria |
error_description |
Descripción legible por humanos del error |
error_uri |
URI que proporciona más detalles sobre el error |
Ejemplo de respuesta de 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."
}
Intercambia el código de autorización por un token de ID
Deberás intercambiar el código de autorización que recibiste por un token de ID de Google que contenga 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 establece los siguientes parámetros:
Campos de la solicitud | |
---|---|
client_id |
Obligatorio: Es el ID de cliente que se obtiene de la página Credenciales de la Consola de APIs. Por lo general, esta será la credencial con el nombre New Actions on Google App. |
client_secret |
Obligatorio: Es el secreto de cliente que se obtiene en la página Credenciales de la Consola de API. |
code |
Obligatorio: Es el código de autorización que se envió en la solicitud inicial. |
grant_type |
Obligatorio Como se define en la especificación de OAuth 2.0, el valor de este campo debe establecerse 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 |
Es un token de acceso emitido por Google que envía tu aplicación 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 Validar respuesta contiene detalles para decodificar y validar la respuesta del token de ID. |
expires_in |
Es la vida útil restante del token de acceso en segundos. |
refresh_token |
Es 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 se establece en openid para el caso de uso de acceso con cuenta vinculada. |
token_type |
Es el tipo de token que se muestra. En este momento, el valor de este campo siempre se establece en 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