Vinculación de Cuentas de Google con OAuth

Las cuentas se vinculan mediante los flujos implícitos y de código de autorización de OAuth 2.0 estándar de la industria. Tu servicio debe ser compatible con los extremos de autorización y intercambio de tokens que cumplan con OAuth 2.0.

En el flujo implícito, Google abre el extremo de autorización en el navegador del usuario. Después de que el acceso sea exitoso, se muestra un token de acceso de larga duración a Google. Este token de acceso ahora se incluye en cada solicitud enviada desde Google.

En el flujo de código de autorización, necesitas dos extremos:

  • El extremo de autorización, que presenta la IU de acceso a los usuarios que aún no accedieron. El extremo de autorización también crea un código de autorización de corta duración para registrar el acceso solicitado por los usuarios.

  • El extremo de intercambio de tokens, que es responsable de dos tipos de intercambios:

    1. Intercambia un código de autorización por un token de actualización de larga duración y un token de acceso de corta duración. Este intercambio se produce cuando el usuario pasa por el flujo de vinculación de cuentas.
    2. Intercambia un token de actualización de larga duración por un token de acceso de corta duración. Este intercambio se produce cuando Google necesita un nuevo token de acceso porque venció.

Elige un flujo de OAuth 2.0

Aunque el flujo implícito es más fácil de implementar, Google recomienda que los tokens de acceso emitidos por el flujo implícito nunca venzan. Esto se debe a que el usuario se ve obligado a vincular su cuenta de nuevo después de que un token caduque con el flujo implícito. Si necesitas el vencimiento del token por razones de seguridad, te recomendamos que uses el flujo de código de autorización en su lugar.

Pautas de diseño

En esta sección, se describen los requisitos de diseño y las recomendaciones para la pantalla del usuario que alojas en los flujos de vinculación de OAuth. Una vez que la app la llama, tu plataforma le muestra al usuario un acceso a la página de Google y a la pantalla de consentimiento de vinculación de la cuenta. Cuando el usuario da su consentimiento para vincular las cuentas, se lo redirige a la app de Google.

En esta figura, se muestran los pasos para que un usuario vincule su Cuenta de Google a tu sistema de autenticación. La primera captura de pantalla muestra vínculos iniciados por el usuario desde tu plataforma. En la segunda, se muestra el acceso del usuario a Google, mientras que la tercera muestra el consentimiento y la confirmación para vincular su Cuenta de Google con tu app. En la última captura de pantalla, se muestra una cuenta de usuario vinculada correctamente en Google app.
Figura 1: Cuenta de vinculación de usuarios que accede a Google y a las pantallas de consentimiento.

Requisitos

  1. Debes comunicar que la cuenta del usuario se vinculará a Google, no a un producto de Google específico, como Google Home o el Asistente de Google.

Recomendaciones

Te recomendamos que hagas lo siguiente:

  1. Muestra la Política de Privacidad de Google. Incluye un vínculo a la Política de Privacidad de Google en la pantalla de consentimiento.

  2. Datos que se compartirán. Utiliza un lenguaje claro y conciso para indicarle al usuario qué datos de Google requiere y por qué.

  3. Llamado a la acción claro. Indica un llamado a la acción claro en tu pantalla de consentimiento, como "Aceptar y vincular". Esto se debe a que los usuarios deben comprender qué datos deben compartir con Google para vincular sus cuentas.

  4. Capacidad de cancelación. Proporciona a los usuarios una forma de regresar o cancelar si deciden no vincularse.

  5. Borrar el proceso de acceso Asegúrate de que los usuarios tengan un método claro para acceder a su Cuenta de Google, como los campos para su nombre de usuario y contraseña, o para acceder con Google.

  6. Capacidad de desvinculación. Ofrece un mecanismo para que los usuarios se desvinculen, como una URL que dirige a la configuración de su cuenta en tu plataforma. Como alternativa, puedes incluir un vínculo a la Cuenta de Google en la que los usuarios puedan administrar su cuenta vinculada.

  7. Capacidad para cambiar la cuenta de usuario Sugerir un método para que los usuarios cambien sus cuentas Esto es especialmente beneficioso si los usuarios tienden a tener varias cuentas.

    • Si un usuario debe cerrar la pantalla de consentimiento para cambiar de cuenta, envía un error recuperable a Google a fin de que el usuario pueda acceder a la cuenta deseada con la vinculación de OAuth y el flujo implícito.
  8. Incluya su logotipo. Muestre el logotipo de su empresa en la pantalla de consentimiento. Usa tus lineamientos de estilo para ubicar tu logotipo. Si también deseas mostrar el logotipo de Google, consulta Logotipos y marcas.

Create the project

To create your project to use account linking:

  1. Go to the Google API Console.
  2. Haz clic en Crear proyecto .
  3. Ingrese un nombre o acepte la sugerencia generada.
  4. Confirme o edite los campos restantes.
  5. Haz clic en Crear .

Para ver su ID de proyecto:

  1. Go to the Google API Console.
  2. Encuentra tu proyecto en la tabla de la página de inicio. El ID del proyecto aparece en la columna ID .

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.

  1. Open the OAuth consent screen page of the Google APIs console.
  2. If prompted, select the project you just created.
  3. 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

  4. 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 OAuth

Para admitir el flujo implícito de OAuth 2.0, tu servicio hace una autorización de destino disponible a través de HTTPS. Este extremo es responsable de la autenticación y 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 acceso solicitado.

Cuando una aplicación de Google necesita llamar a una de las APIs autorizadas de tu servicio Google usa este extremo a fin de obtener permiso de los usuarios para llamar a estas APIs por ellos.

Una sesión típica de flujo implícito de OAuth 2.0 que inicia Google tiene la siguiente flujo:

  1. Google abre el extremo de autorización en el navegador del usuario. El usuario accede a la cuenta, si aún no lo hizo, y le otorga permiso a Google para acceder a sus datos con tu API, si aún no han otorgado permiso.
  2. Tu servicio crea un token de acceso y lo devuelve a Google. Para ello, vuelve a redireccionar el navegador del usuario a Google con el permiso de acceso. token asociado 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 a Google autorización para acceder a la API y, luego, completa la llamada a la API.

Maneja solicitudes de autorización

Cuando una aplicación de Google necesita vincular cuentas mediante OAuth 2.0 implícito, Google envía al usuario a tu extremo de autorización con un que incluya los siguientes parámetros:

Parámetros del extremo de autorización
client_id El ID de cliente que le asignaste a Google
redirect_uri La URL a la que envías la respuesta a esta solicitud.
state Un valor de contabilidad que se devuelve a Google sin modificar en el URI de redireccionamiento.
response_type Es el tipo de valor que se debe mostrar en la respuesta. Para el OAuth 2.0 implícito el tipo de respuesta siempre es token.
user_locale La configuración de idioma de la Cuenta de Google en RFC5646 que se usa para localizar tu contenido en el idioma de preferencia del usuario.

Por ejemplo, si tu extremo de autorización está disponible en https://myservice.example.com/auth, una solicitud podría verse de la siguiente manera:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE

Para que tu extremo de autorización controle las solicitudes de acceso, haz lo siguiente pasos:

  1. Verifica los valores client_id y redirect_uri para evita que se otorgue acceso a apps cliente no deseadas o configuradas incorrectamente:

    • Confirma que client_id coincida con el ID de cliente que asignados a Google.
    • Confirma que la URL especificada por redirect_uri tiene la siguiente forma:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Verifica si el usuario accedió a tu servicio. Si el usuario no está firmado completa el flujo de acceso o registro del servicio.

  3. Genera un token de acceso para que Google acceda a tu API. El el token de acceso puede ser cualquier valor de cadena, pero debe representar de forma única usuario y cliente para el que es el token y no se debe poder adivinar.

  4. Envía una respuesta HTTP que redirecciona el navegador del usuario a la URL especificadas por el parámetro redirect_uri. Incluye todos los siguientes parámetros en el fragmento de URL:

    • access_token: El token de acceso que acabas de generar
    • token_type: Es la cadena bearer.
    • state: Es el valor de estado sin modificar del original. solicitud

    El siguiente es un ejemplo de la URL resultante:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

El controlador de redireccionamiento de OAuth 2.0 de Google recibe el token de acceso y confirma que el valor de state no haya cambiado. Después de que Google obtiene una token de acceso para tu servicio, Google lo conectará a las llamadas posteriores a tus APIs de servicio.

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.

Cómo validar la implementación

You can validate your implementation by using the OAuth 2.0 Playground tool.

In the tool, do the following steps:

  1. Click Configuration to open the OAuth 2.0 Configuration window.
  2. In the OAuth flow field, select Client-side.
  3. In the OAuth Endpoints field, select Custom.
  4. Specify your OAuth 2.0 endpoint and the client ID you assigned to Google in the corresponding fields.
  5. In the Step 1 section, don't select any Google scopes. Instead, leave this field blank or type a scope valid for your server (or an arbitrary string if you don't use OAuth scopes). When you're done, click Authorize APIs.
  6. In the Step 2 and Step 3 sections, go through the OAuth 2.0 flow and verify that each step works as intended.

You can validate your implementation by using the Google Account Linking Demo tool.

In the tool, do the following steps:

  1. Click the Sign-in with Google button.
  2. Choose the account you'd like to link.
  3. Enter the service ID.
  4. Optionally enter one or more scopes that you will request access for.
  5. Click Start Demo.
  6. When prompted, confirm that you may consent and deny the linking request.
  7. Confirm that you are redirected to your platform.