Las cuentas se vinculan con el flujo de código de autorización de OAuth 2.0 estándar de la industria.
OAuth 2.1 y PKCE para agentes
Para los agentes de IA sin estado y las canalizaciones multimodales, se recomienda aplicar OAuth 2.1.
- PKCE (Proof Key for Code Exchange): Se debe usar para proteger el flujo del código de autorización y evitar ataques de interceptación.
- No hay flujo implícito: El flujo implícito expone tokens de acceso en la URL, lo que representa un riesgo de seguridad para los entornos de agentes.
Tu servicio debe admitir extremos de autorización y de intercambio de tokens que cumplan con OAuth 2.0/2.1.
Create the project
To create your project to use account linking:
- Go to the Google API Console.
- Click Create project.
- Enter a name or accept the generated suggestion.
- Confirm or edit any remaining fields.
- Click Create.
To view your project ID:
- Go to the Google API Console.
- Find your project in the table on the landing page. The project ID appears in the ID column.
Configure your OAuth Consent Screen
The Google Account Linking process includes a consent screen which tells users the application requesting access to their data, what kind of data they are asking for and the terms that apply. You will need to configure your OAuth consent screen before generating a Google API client ID.
- Open the OAuth consent screen page of the Google APIs console.
- If prompted, select the project you just created.
On the "OAuth consent screen" page, fill out the form and click the “Save” button.
Application name: The name of the application asking for consent. The name should accurately reflect your application and be consistent with the application name users see elsewhere. The application name will be shown on the Account Linking consent screen.
Application logo: An image on the consent screen that will help users recognize your app. The logo is shown on Account linking consent screen and on account settings
Support email: For users to contact you with questions about their consent.
Scopes for Google APIs: Scopes allow your application to access your user's private Google data. For the Google Account Linking use case, default scope (email, profile, openid) is sufficient, you don’t need to add any sensitive scopes. It is generally a best practice to request scopes incrementally, at the time access is required, rather than up front. Learn more.
Authorized domains: To protect you and your users, Google only allows applications that authenticate using OAuth to use Authorized Domains. Your applications' links must be hosted on Authorized Domains. Learn more.
Application Homepage link: Home page for your application. Must be hosted on an Authorized Domain.
Application Privacy Policy link: Shown on Google Account Linking consent screen. Must be hosted on an Authorized Domain.
Application Terms of Service link (Optional): Must be hosted on an Authorized Domain.
Figure 1. Google Account Linking Consent Screen for a fictitious Application, Tunery
Check "Verification Status", if your application needs verification then click the "Submit For Verification" button to submit your application for verification. Refer to OAuth verification requirements for details.
Implementa tu servidor de OAuth
Una implementación del servidor OAuth 2.0 del flujo de código de autorización consta de dos extremos que tu servicio pone a disposición a través de HTTPS. El primer extremo es el de autorización, que es responsable de encontrar o obtener el consentimiento de los usuarios para el acceso 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. El segundo extremo es el de intercambio de tokens, que se usa para obtener cadenas encriptadas, llamadas tokens, que autorizan a un usuario a acceder a tu servicio.
Cuando una aplicación de Google necesita llamar a una de las APIs de tu servicio, Google usa estos extremos en conjunto para obtener permiso de tus usuarios para llamar a estas APIs en su nombre.
Vinculación de la Cuenta de Google: Flujo de código de autorización de OAuth
En el siguiente diagrama de secuencia, se detallan las interacciones entre el usuario, Google y los extremos de tu servicio.
Funciones y responsabilidades
En la siguiente tabla, se definen las funciones y responsabilidades de los actores en el flujo 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 de servicios.
| Actor o componente | Función de GAL | Responsabilidades |
|---|---|---|
| Aplicación o servidor de Google | Cliente de OAuth | Inicia el flujo, recibe el código de autorización, lo intercambia por tokens y los 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 y obtiene su consentimiento para compartir el acceso a sus datos con Google. |
| Tu extremo de intercambio de tokens | Servidor de autorización | Valida los códigos de autorización y los tokens de actualización, y emite tokens de acceso tokens al servidor de 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
code y state valores. |
Una sesión de flujo de código de autorización de OAuth 2.0 iniciada por Google tiene el siguiente flujo:
- Google abre tu extremo de autorización en el navegador del usuario. Si el flujo se inició en un dispositivo solo de voz para una acción, Google transfiere la ejecución a un teléfono.
- El usuario accede, si aún no lo hizo, y otorga permiso a Google para acceder a sus datos con tu API, si aún no lo hizo.
- Tu servicio crea un código de autorización y lo muestra a Google. Para ello, redirecciona el navegador del usuario a Google con el código de autorización adjunto a la solicitud.
- Google envía el código de autorización a tu extremo de intercambio de tokens, que verifica la autenticidad del código y muestra un token de acceso y un token de actualización. El token de acceso es un token de corta duración que tu servicio acepta como credenciales para acceder a las APIs. El token de actualización es un token de larga duración que Google puede almacenar y usar para adquirir tokens de acceso nuevos cuando vencen.
- Una vez que el usuario completa el flujo de vinculación de cuentas, cada solicitud posterior que se envía desde Google contiene un token de acceso.
Receta de implementación
Sigue estos pasos para implementar el flujo de código de autorización.
Paso 1: Administra las solicitudes de autorización
Cuando Google inicia la vinculación de cuentas, 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 administrar la solicitud, realiza las siguientes acciones:
Valida la solicitud:
- Confirma que el
client_idcoincida con el ID de cliente asignado a Google. - Confirma que el
redirect_uricoincida 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_typeseacode.
- Confirma que el
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.
Genera un código de autorización:
- Crea un código de autorización único y no adivinable asociado con el usuario y el cliente.
- Configura el código para que venza en aproximadamente 10 minutos.
Redirecciona a Google:
- Redirecciona el navegador a la URL proporcionada en
redirect_uri. - Agrega los siguientes parámetros de consulta:
code: Es el código de autorización que generaste.state: Es el valor de estado sin modificar que se recibió de Google.
- Redirecciona el navegador a la URL proporcionada en
Paso 2: Administra las solicitudes de intercambio de tokens
Tu extremo de intercambio de tokens procesa dos tipos de solicitudes: el intercambio de códigos por tokens y la actualización de tokens de acceso vencidos. Para obtener información detallada sobre los contratos de protocolo y los requisitos de parámetros, consulta el extremo de intercambio de tokens.
A. Intercambia códigos de autorización por tokens
Cuando Google recibe el código de autorización, llama a tu extremo de intercambio de tokens (POST) para recuperar tokens.
Valida la solicitud:
- Verifica
client_idyclient_secret. - Verifica que el código de autorización sea válido y no haya vencido.
- Confirma que
redirect_uricoincida con el valor usado en el paso 1. - Si falla la validación, muestra un error HTTP
400 Bad Requestcon{"error": "invalid_grant"}.
- Verifica
Emite tokens:
- Genera un
refresh_tokende larga duración y unaccess_tokende corta duración (por lo general, 1 hora). - Muestra un error HTTP
200 OKcon la respuesta de token JSON estándar.
- Genera un
B. Actualiza los tokens de acceso
Cuando vence el token de acceso, Google solicita uno nuevo con el token de actualización.
Valida la solicitud:
- Verifica
client_id,client_secretyrefresh_token. - Si falla la validación, muestra un error HTTP
400 Bad Requestcon{"error": "invalid_grant"}.
- Verifica
Emite un token de acceso nuevo:
- Genera un
access_tokennuevo de corta duración. - Muestra un error HTTP
200 OKcon la respuesta de token JSON (opcionalmente, incluye un token de actualización nuevo).
- Genera un
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:
- Acceso a la cuenta vinculada con Google One Tap.
- Suscripción sin inconvenientes en Android TV.
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:
- Extrae el token de acceso del encabezado de autorización y muestra la información del usuario asociada con el token de acceso.
- 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: 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.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
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:
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.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }respuesta del extremo userinfo subUn ID único que identifica al usuario en tu sistema. emailDirección de correo electrónico del usuario. given_nameOpcional: Es el nombre del usuario. family_nameOpcional: Apellido del usuario. nameOpcional: Es el nombre completo del usuario. pictureOpcional: Foto de perfil del usuario.
Cómo validar la implementación
Puedes validar tu implementación con la herramienta OAuth 2.0 Playground.
En la herramienta, sigue estos pasos:
- Haz clic en Configuración para abrir la ventana Configuración de OAuth 2.0.
- En el campo Flujo de OAuth, selecciona Del cliente.
- En el campo Extremos de OAuth, selecciona Personalizado.
- Especifica tu extremo de OAuth 2.0 y el ID de cliente que le asignaste a Google en los campos correspondientes.
- En la sección Paso 1, no selecciones ningún alcance de Google. En su lugar, deja este campo en blanco o escribe un alcance válido para tu servidor (o una cadena arbitraria si no usas alcances de OAuth). Cuando termines, haz clic en Autorizar APIs.
- En las secciones Paso 2 y Paso 3, sigue el flujo de OAuth 2.0 y verifica que cada paso funcione según lo previsto.
Puedes validar tu implementación con la herramienta de demostración de vinculación de Cuentas de Google.
En la herramienta, sigue estos pasos:
- Haz clic en el botón Acceder con Google.
- Elige la cuenta que quieras vincular.
- Ingresa el ID de servicio.
- De manera opcional, ingresa uno o más alcances para los que solicitarás acceso.
- Haz clic en Iniciar demostración.
- Cuando se te solicite, confirma que puedes dar tu consentimiento y rechazar la solicitud de vinculación.
- Confirma que se te redirecciona a tu plataforma.