Vinculación de Cuentas de Google con OAuth (flujo implícito; archivado)

Para admitir el flujo implícito de OAuth 2.0, tu servicio pone a disposición un extremo de autorización a través de HTTPS. Este extremo es responsable de la autenticación y de obtener el consentimiento de los usuarios para acceder a los datos. El extremo de autorización presenta una IU de acceso a los usuarios que aún no accedieron y registra el consentimiento para el acceso solicitado.

Cuando una aplicación de Google necesita llamar a una de las APIs autorizadas de tu servicio, Google usa este endpoint para obtener permiso de tus usuarios para llamar a estas APIs en su nombre.

Vinculación de la Cuenta de Google: flujo implícito de OAuth

En el siguiente diagrama de secuencia, se detallan las interacciones entre el usuario, Google y los extremos de tu servicio.

Usuario App de Google o navegador Tu extremo de autorización 1. El usuario inicia la vinculación 2. Redirige al extremo de autorización (GET) client_id, redirect_uri, state, scope 3. Mostrar la pantalla de consentimiento y acceso 4. El usuario se autentica y otorga su consentimiento 5. Redirige a Google con el token (GET) access_token, state 6. Almacena tokens de usuario. 7. Accede a los recursos del usuario
Figura 1. La secuencia de eventos en el flujo implícito de OAuth 2.0 para la vinculación de la Cuenta de Google.

Funciones y responsabilidades

En la siguiente tabla, se definen los roles y las responsabilidades de los actores en el flujo implícito de OAuth de la vinculación de la Cuenta de Google (GAL). Ten en cuenta que, en GAL, Google actúa como el cliente de OAuth, mientras que tu servicio actúa como el proveedor de identidad o servicio.

Actor / Componente Rol de GAL Responsabilidades
App o servidor de Google Cliente de OAuth Inicia el flujo, recibe el token de acceso a través de un redireccionamiento del navegador y lo almacena de forma segura para acceder a las APIs de tu servicio.
Tu extremo de autorización Servidor de autorización Autentica a tus usuarios, obtiene su consentimiento y emite tokens de acceso de larga duración directamente a Google.
URI de redireccionamiento de Google Extremo de devolución de llamada Recibe el redireccionamiento del usuario desde tu servicio de autorización con los valores access_token y state en el fragmento de URL.

Una sesión típica del flujo implícito de OAuth 2.0 iniciada por Google tiene el siguiente flujo:

  1. Google abre tu extremo de autorización en el navegador del usuario. El usuario accede, si aún no lo hizo, y le otorga permiso a Google para acceder a sus datos con tu API, si aún no lo hizo.
  2. Tu servicio crea un token de acceso y se lo devuelve a Google. Para ello, redirecciona el navegador del usuario a Google con el token de acceso adjunto a la solicitud.
  3. Google llama a las APIs de tu servicio y adjunta el token de acceso con cada solicitud. Tu servicio verifica que el token de acceso otorgue autorización a Google para acceder a la API y, luego, completa la llamada a la API.

Receta de implementación

Sigue estos pasos para implementar el flujo implícito.

Paso 1: Controla las solicitudes de autorización

Cuando Google inicia la vinculación de la cuenta, redirecciona al usuario a tu extremo de autorización. Para obtener información detallada sobre los contratos de protocolo y los requisitos de parámetros, consulta el extremo de autorización.

Para controlar la solicitud, realiza las siguientes acciones:

  1. Valida la solicitud:

    • Confirma que el valor de client_id coincida con el ID de cliente asignado a Google.
    • Confirma que redirect_uri coincida con la URL de redireccionamiento de Google esperada: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • Verifica que response_type sea token.
  2. Autentica al usuario:

    • Verifica si el usuario accedió a tu servicio.
    • Si el usuario no accedió, pídele que complete tu flujo de acceso o registro.
  3. Genera un token de acceso:

    • Crea un token de acceso único y no adivinable asociado con el usuario y el cliente.
  4. Redirige a Google:

    • Redirecciona el navegador a la URL proporcionada en redirect_uri.
    • Agrega los siguientes parámetros al fragmento de URL (hash):
      • access_token: Es el token de acceso que generaste.
      • token_type: Debe ser bearer.
      • state: Es el valor de estado sin modificar que se recibió de Google.
Controla las solicitudes userinfo

El extremo userinfo es un recurso protegido de OAuth 2.0 que muestra reclamos sobre el usuario vinculado. La implementación y el alojamiento del extremo userinfo son opcionales, excepto en los siguientes casos de uso:

Una vez que el token de acceso se recupera correctamente del extremo del token, Google envía una solicitud al extremo userinfo para recuperar la información básica de perfil del usuario vinculado.

Encabezados de la solicitud del extremo userinfo
Authorization header El token de acceso del tipo portador.

Por ejemplo, si el extremo userinfo está disponible en https://myservice.example.com/userinfo, una solicitud podría verse de la siguiente manera:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Para que tu extremo userinfo controle las solicitudes, sigue estos pasos:

  1. Extrae el token de acceso del encabezado de autorización y muestra la información del usuario asociada con el token de acceso.
  2. Si el token de acceso no es válido, muestra un error HTTP 401 No autorizado con el encabezado de respuesta WWW-Authenticate. A continuación, se muestra un ejemplo de una respuesta de error de userinfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Si se muestra una respuesta de error 401 No autorizado o cualquier otra respuesta de error no exitosa durante el proceso de vinculación, el error no se podrá recuperar, el token recuperado se descartará y el usuario deberá volver a iniciar el proceso de vinculación.
  3. Si el token de acceso es válido, devuelve una respuesta HTTP 200 con el siguiente objeto JSON en el cuerpo del protocolo HTTPS respuesta:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    Si el extremo userinfo muestra una respuesta exitosa HTTP 200, el token y las reclamaciones recuperados se registran con la Cuenta de Google del usuario.

    respuesta del extremo userinfo
    sub Un ID único que identifica al usuario en tu sistema.
    email Dirección de correo electrónico del usuario.
    given_name Opcional: Es el nombre del usuario.
    family_name Opcional: Apellido del usuario.
    name Opcional: Es el nombre completo del usuario.
    picture Opcional: Foto de perfil del usuario.