Advertencia: estos datos se proporcionan en virtud de la Política de datos de usuario de Google . Revise y cumpla con la política. El no hacerlo puede resultar en la suspensión del proyecto o la suspensión de la cuenta.

Inicio de sesión de cuenta vinculada

Google enlace de cuentas permite a los titulares de cuentas de Google de forma rápida, sin problemas y con seguridad conectarse a sus servicios y compartir datos con Google.

Cuenta Vinculada Sign-in permite a un grifo de sesión con Google para los usuarios que ya tienen su cuenta de Google vinculada a su servicio. Esto mejora la experiencia de los usuarios, ya que pueden iniciar sesión 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 su servicio.

Requisitos

Para implementar el inicio de sesión de cuenta vinculada, debe cumplir con los siguientes requisitos:

  • Usted tiene una cuenta de Google OAuth Vinculación aplicación que soporta la autorización OAuth 2.0 flujo de código. Su implementación de OAuth debe incluir los siguientes extremos:
  • Tienes una aplicación para Android.

Cómo funciona

Requisito previo: el usuario ha vinculado previamente su cuenta de Google con su cuenta en su servicio.

  1. Usted opta por mostrar las cuentas vinculadas durante el proceso de inicio de sesión de One Tap.
  2. Al usuario se le muestra un mensaje de inicio de sesión con un toque con una opción para iniciar sesión en su servicio con su cuenta vinculada.
  3. Si el usuario elige continuar con la cuenta vinculada, Google envía una solicitud a su punto final de token para guardar un código de autorización. La solicitud contiene el token de acceso del usuario emitido por su servicio y un código de autorización de Google.
  4. Cambia 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.
  5. Su aplicación también recibe un token de ID cuando finaliza el flujo y usted lo compara con el identificador de usuario en el token de ID que recibió su servidor para iniciar la sesión del usuario en su aplicación.
Inicio de sesión de cuenta vinculada.
Figura 1. Linked cuenta Inicio de sesión en el flujo. Si el usuario ha iniciado sesión en varias cuentas en su dispositivo, el usuario puede ver un selector de cuenta y solo se lo lleva a la vista Inicio de sesión de cuenta vinculada si selecciona una cuenta vinculada.

Implementar el inicio de sesión de cuenta vinculada en su aplicación de Android

Para apoyar Cuenta Vinculada Sign-In en su aplicación para Android, siga las instrucciones de la guía de implementación de Android .

Manejar solicitudes de códigos de autorización de Google

Google realiza una solicitud POST a su punto final de token para guardar un código de autorización que intercambia por el token de identificación 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, se debe verificar el token de acceso fue concedido por su parte a Google, identificado por el 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

Su punto final de intercambio de tokens debe poder manejar los siguientes parámetros de solicitud:

Parámetros de punto final de token
code Código de autorización requerido Google OAuth2
client_id Identificación de Cliente correspondiente que se emitirá a Google
client_secret Secreto Cliente correspondiente que ha emitido a Google
access_token Se requiere acceso de ficha que ha emitido Google. Usarás esto para obtener el contexto del usuario.
grant_type Valor requerido deberá ser fijado a urn:ietf:params:oauth:grant-type:reciprocal

Su punto final de intercambio de tokens debe responder a la solicitud POST haciendo lo siguiente:

  • Verificar la access_token fue concedido a Google identifica por el client_id .
  • Responda con una respuesta HTTP 200 (OK) si la solicitud es válida y el código de autenticación se intercambió correctamente por un token de ID de Google, o un código de error HTTP si la solicitud no es válida.

Respuesta HTTP

Éxito

Devuelve el código de estado HTTP 200 OK

Ejemplo de respuesta de éxito
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

Errores

En caso de una solicitud HTTP no válida, responda 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 la solicitud. Esto también se puede devolver si la solicitud incluye un parámetro no admitido o repite un parámetro
401 {"error": "invalid_request"} Error en la autenticación del cliente, por ejemplo, si la solicitud contiene un ID de cliente o un secreto no válidos
401 {"error": "invalid_token"}

Incluya el desafío de autenticación "WWW-Authentication: Bearer" en el encabezado de la respuesta

El token de acceso de socio no es válido.
403 {"error": "insufficient_permission"}

Incluya el desafío de autenticación "WWW-Authentication: Bearer" en el encabezado de la respuesta

El token de acceso de socio no contiene los alcances 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 requerida
error_description Descripción del error legible por humanos
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."
}

Código de autorización de intercambio para token de identificación

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 cambiar un código de autorización para un identificador ID de Google, llame a la https://oauth2.googleapis.com/token punto final y ajustar los siguientes parámetros:

Campos de solicitud
client_id El ID de cliente requerido obtenida de la consola API página Credenciales . Este será típicamente la credencial con el nombre de New acciones en Google App
client_secret El secreto requerido cliente obtenida de la consola API página Credenciales
code Requerido El código de autorización enviado en la solicitud inicial
grant_type Requerido Como se define en la especificación 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 devolviendo 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 su aplicación envía para autorizar una solicitud de API de Google
id_token El token de ID contiene la información de la cuenta de Google del usuario. La sección Validar la respuesta contiene información detallada sobre cómo decodificar y validar la respuesta simbólica ID
expires_in La vida útil restante del token de acceso en segundos
refresh_token Un token que puede 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 inicio de sesión de cuenta vinculada
token_type El tipo de token devuelto. 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

Validar la respuesta del token de identificación

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 y hd 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.