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:
- 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.
- 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.](https://developers-dot-devsite-v2-prod.appspot.com/static/identity/images/oauth-linking-flow.png?authuser=6&hl=es)
Requisitos
- 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:
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.
Datos que se compartirán. Utiliza un lenguaje claro y conciso para indicarle al usuario qué datos de Google requiere y por qué.
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.
Capacidad de cancelación. Proporciona a los usuarios una forma de regresar o cancelar si deciden no vincularse.
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.
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.
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.
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.
![En esta figura, se muestran ejemplos de pantallas de consentimiento y de acceso de los usuarios con llamados a la información sobre los requisitos y las recomendaciones que se deben seguir cuando se diseñe una pantalla de consentimiento y un acceso de usuario.](https://developers-dot-devsite-v2-prod.appspot.com/static/identity/images/oauth-linking-consent.png?authuser=6&hl=es)
Crea el proyecto
Para crear tu proyecto y usar la vinculación de cuentas, sigue estos pasos:
- Go to the Google API Console.
- Haz clic en Crear proyecto .
- Ingrese un nombre o acepte la sugerencia generada.
- Confirme o edite los campos restantes.
- Haz clic en Crear .
Para ver su ID de proyecto:
- Go to the Google API Console.
- Encuentra tu proyecto en la tabla de la página de inicio. El ID del proyecto aparece en la columna ID .
Configura la pantalla de consentimiento de OAuth
El proceso de vinculación de cuentas de Google incluye una pantalla de consentimiento que indica a los usuarios la aplicación que solicita acceso a sus datos, qué tipo de datos están solicitando y las condiciones correspondientes. Deberás configurar la pantalla de consentimiento de OAuth antes de generar un ID de cliente de la API de Google.
- Abre la página Pantalla de consentimiento de OAuth de la consola de APIs de Google.
- Si se te solicita, selecciona el proyecto que acabas de crear.
En la página "Pantalla de consentimiento de OAuth", completa el formulario y haz clic en el botón "Guardar".
Nombre de la aplicación: Es el nombre de la aplicación que solicita el consentimiento. El nombre debe reflejar tu aplicación con exactitud y ser coherente con el nombre que los usuarios ven en otros lugares. El nombre de la aplicación se mostrará en la pantalla de consentimiento de la vinculación de cuentas.
Logotipo de la aplicación: Es una imagen en la pantalla de consentimiento que ayudará a los usuarios a reconocer tu app. El logotipo se muestra en la pantalla de consentimiento de vinculación de cuentas y en la configuración de la cuenta.
Correo electrónico de asistencia: Permite que los usuarios se comuniquen contigo si tienen preguntas sobre su consentimiento.
Alcances para las APIs de Google: los permisos permiten que tu aplicación acceda a los datos privados de Google de tu usuario. Para el caso de uso de la vinculación de Cuentas de Google, el alcance predeterminado (email, profile, openid) es suficiente; no necesitas agregar ningún alcance sensible. Por lo general, se recomienda solicitar alcances de forma incremental cuando se requiere acceso, en lugar de hacerlo de forma anticipada. Más información
Dominios autorizados: Para protegerlos a ti y a tus usuarios, Google solo permite que las aplicaciones que se autentiquen con OAuth usen dominios autorizados. Los vínculos de tus aplicaciones deben estar alojados en dominios autorizados. Más información
Vínculo a la página principal de la aplicación: Es la página principal de tu aplicación. Debe estar alojado en un dominio autorizado.
Vínculo a la Política de Privacidad de la aplicación: Se muestra en la pantalla de consentimiento de la vinculación de la Cuenta de Google. Debe estar alojado en un dominio autorizado.
Vínculo de las Condiciones del Servicio de la aplicación (opcional): Se debe alojar en un dominio autorizado.
Figura 1: Pantalla de consentimiento de vinculación de Cuentas de Google para una aplicación ficticia, Tunery
Revisa el "Estado de verificación" y, si es necesario verificar tu aplicación, haz clic en el botón "Enviar para verificación" a fin de enviarla para que se verifique. Consulta los requisitos de verificación de OAuth para obtener más información.
Implementa tu servidor OAuth
Un servidor de aplicación de OAuth 2.0 del flujo de código de autorización consiste en dos puntos finales, que su servicio pone a disposición mediante HTTPS. El primer punto final es el punto final de autorización, que es responsable de encontrar u obtener el consentimiento de los usuarios para el acceso a los datos. El extremo de autorización presenta una IU de inicio de sesión para los usuarios que aún no han iniciado sesión y registra el consentimiento para el acceso solicitado. El segundo punto final es el punto final de intercambio de tokens, que se utiliza para obtener cadenas cifradas, llamadas tokens, que autorizan a un usuario a acceder a su servicio.
Cuando una aplicación de Google necesita llamar a una de las API de su servicio, Google usa estos puntos finales juntos para obtener el permiso de sus usuarios para llamar a estas API en su nombre.
Una sesión de flujo de código de autorización de OAuth 2.0 iniciada por Google tiene el siguiente flujo:
- Google abre su punto final de autorización en el navegador del usuario. Si el flujo comenzó en un dispositivo solo de voz para una acción, Google transfiere la ejecución a un teléfono.
- El usuario inicia sesión, si aún no lo ha hecho, y le otorga permiso a Google para acceder a sus datos con su API, si aún no lo ha otorgado.
- Su servicio crea un código de autorización y lo devuelve a Google. Para hacerlo, redirija 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 su punto final el intercambio de token, que verifica la autenticidad del código y devuelve un token y un token de acceso de actualización. El token de acceso es un token de corta duración que su servicio acepta como credenciales para acceder a las API. El token de actualización es un token de larga duración que Google puede almacenar y usar para adquirir nuevos tokens de acceso cuando vencen.
- Una vez que el usuario ha completado el flujo de vinculación de la cuenta, cada solicitud posterior enviada desde Google contiene un token de acceso.
Manejar solicitudes de autorización
Cuando necesita realizar la vinculación de cuentas mediante el flujo de código de autorización de OAuth 2.0, Google envía al usuario a su punto final de autorización con una solicitud que incluye los siguientes parámetros:
Parámetros de punto final de autorización | |
---|---|
client_id | El ID de cliente que asignó a Google. |
redirect_uri | La URL a la que envía la respuesta a esta solicitud. |
state | Un valor contable que se devuelve a Google sin cambios en el URI de redireccionamiento. |
scope | Opcional: Un conjunto delimitada por espacios de las cadenas de alcance que especifican los datos de Google está solicitando autorización para. |
response_type | El tipo de valor que se devolverá en la respuesta. Para el OAuth flujo de código de autorización 2.0, el tipo de respuesta es siempre code . |
user_locale | La configuración de idioma en la cuenta de Google RFC5646 formato, que se utiliza para localizar el contenido en el idioma preferido del usuario. |
Por ejemplo, si su punto final de autorización está disponible en https://myservice.example.com/auth
, una solicitud puede tener un aspecto como el siguiente:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
Para que su punto final de autorización maneje las solicitudes de inicio de sesión, siga los siguientes pasos:
- Compruebe que la
client_id
coincide con el ID de cliente que ha asignado a Google, y que elredirect_uri
coincide con la URL de redireccionamiento proporcionado por Google para su servicio. Estas comprobaciones son importantes para evitar otorgar acceso a aplicaciones cliente no intencionadas o mal configuradas. Si admite múltiples flujos de OAuth 2.0, también confirmar que elresponse_type
escode
. - Compruebe si el usuario ha iniciado sesión en su servicio. Si el usuario no ha iniciado sesión, complete el proceso de inicio de sesión o registro de su servicio.
- Genere un código de autorización para que Google lo utilice para acceder a su API. El código de autorización puede ser cualquier valor de cadena, pero debe representar de forma única al usuario, el cliente para el que es el token y la hora de vencimiento del código, y no debe ser adivinable. Por lo general, emite códigos de autorización que caducan después de aproximadamente 10 minutos.
- Confirmar que la URL especificada por el
redirect_uri
parámetro tiene la siguiente forma:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Redirigir el navegador del usuario a la URL especificada por el
redirect_uri
parámetro. Incluir el código de autorización que acaba de generar y el original, el valor de estado no modificado cuando se redirige al anexar loscode
ystate
parámetros. El siguiente es un ejemplo de la URL resultante:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Manejar solicitudes de intercambio de tokens
El punto final de intercambio de tokens de su servicio es responsable de dos tipos de intercambios de tokens:
- Intercambiar códigos de autorización para tokens de acceso y tokens de actualización
- Intercambiar tokens de actualización por tokens de acceso
Las solicitudes de intercambio de tokens incluyen los siguientes parámetros:
Parámetros de punto final de intercambio de tokens | |
---|---|
client_id | Una cadena que identifica el origen de la solicitud como Google. Esta cadena debe estar registrada en su sistema como identificador único de Google. |
client_secret | Una cadena secreta que registró en Google para su servicio. |
grant_type | El tipo de token que se intercambia. Es bien authorization_code o refresh_token . |
code | Cuando grant_type=authorization_code , este parámetro es el código de Google recibido ya sea de su inicio de sesión o criterio de valoración de intercambio simbólico. |
redirect_uri | Cuando grant_type=authorization_code , este parámetro es el URL que se utiliza en la solicitud de autorización inicial. |
refresh_token | Cuando grant_type=refresh_token , este parámetro es el token de actualización de Google ha recibido desde su punto final el intercambio simbólico. |
Intercambiar códigos de autorización para tokens de acceso y tokens de actualización
Una vez que el usuario inicia sesión y su punto final de autorización devuelve un código de autorización de corta duración a Google, Google envía una solicitud a su punto final de intercambio de tokens para intercambiar el código de autorización por un token de acceso y un token de actualización.
Para estas solicitudes, el valor de grant_type
es authorization_code
, y el valor de code
es el valor del código de autorización previamente concedida a Google. El siguiente es un ejemplo de una solicitud para intercambiar un código de autorización por un token de acceso y un token de actualización:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Para intercambiar códigos de autorización para un token de acceso y una actualización manera, el token de cambio de punto final responde a POST
peticiones de ejecución de los siguientes pasos:
- Verificar que los
client_id
identifica el origen petición como un origen autorizado, y que elclient_secret
coincide con el valor esperado. - Verifique que el código de autorización sea válido y no esté vencido, y que el ID de cliente especificado en la solicitud coincida con el ID de cliente asociado con el código de autorización.
- Confirmar que la URL especificada por el
redirect_uri
parámetro es idéntico al valor utilizado en la solicitud de autorización inicial. - Si no se puede verificar todos los criterios anteriores, devolverá un error HTTP 400 Bad Request con
{"error": "invalid_grant"}
como el cuerpo. - De lo contrario, utilice el ID de usuario del código de autorización para generar un token de actualización y un token de acceso. Estos tokens pueden ser cualquier valor de cadena, pero deben representar de forma única al usuario y al cliente para el que es el token, y no deben ser adivinables. En el caso de los tokens de acceso, también registre el tiempo de vencimiento del token, que suele ser una hora después de emitir el token. Los tokens de actualización no caducan.
- Devolver el siguiente objeto JSON en el cuerpo de la respuesta HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google almacena el token de acceso y el token de actualización para el usuario y registra la expiración del token de acceso. Cuando el token de acceso caduca, Google usa el token de actualización para obtener un nuevo token de acceso desde su punto final de intercambio de tokens.
Intercambiar tokens de actualización por tokens de acceso
Cuando un token de acceso caduca, Google envía una solicitud a su punto final de intercambio de tokens para intercambiar un token de actualización por un nuevo token de acceso.
Para estas solicitudes, el valor de grant_type
se refresh_token
, y el valor de refresh_token
es el valor de la señal de actualización previamente otorgados a Google. El siguiente es un ejemplo de una solicitud para intercambiar un token de actualización por un token de acceso:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Intercambiar una actualización token para un token de acceso, el token de cambio de punto final responde a POST
peticiones de ejecución de los siguientes pasos:
- Verificar que los
client_id
identifica el origen petición como Google, y que elclient_secret
coincide con el valor esperado. - Verifique que el token de actualización sea válido y que el ID de cliente especificado en la solicitud coincida con el ID de cliente asociado con el token de actualización.
- Si no se puede verificar todos los criterios anteriores, devolverá un error HTTP 400 Bad Request con
{"error": "invalid_grant"}
como el cuerpo. - De lo contrario, utilice el ID de usuario del token de actualización para generar un token de acceso. Estos tokens pueden ser cualquier valor de cadena, pero deben representar de forma única al usuario y al cliente para el que es el token, y no deben ser adivinables. Para los tokens de acceso, también registre el tiempo de vencimiento del token, generalmente una hora después de emitir el token.
- Devuelve el siguiente objeto JSON en el cuerpo de la respuesta HTTPS:
{ "token_type": "Bearer", "access_token": " ACCESS_TOKEN ", "expires_in": SECONDS_TO_EXPIRATION }
Manejar solicitudes de información de usuario
El punto final userinfo es un recurso protegido OAuth 2.0 que las reclamaciones de retorno sobre el usuario vinculado. La implementación y el alojamiento del punto final de userinfo es opcional, excepto en los siguientes casos de uso:
- Vinculado cuenta Inicio de sesión con Google un toque.
- Suscripción sin fricción en Android TV.
Una vez que el token de acceso se ha recuperado correctamente de su punto final de token, Google envía una solicitud a su punto final de información de usuario para recuperar información de perfil básica sobre el usuario vinculado.
encabezados de solicitud de punto final de userinfo | |
---|---|
Authorization header | El token de acceso de tipo Bearer. |
Por ejemplo, si su userinfo punto final está disponible en https://myservice.example.com/userinfo
, una solicitud puede tener un aspecto como el siguiente:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Para que su punto final de userinfo maneje las solicitudes, siga los siguientes pasos:
- Extraiga el token de acceso del encabezado de autorización y devuelva la información para el usuario asociado con el token de acceso.
- Si el token de acceso no es válido, devuelve un error HTTP 401 no autorizado con el uso de la
WWW-Authenticate
encabezado de respuesta. A continuación se muestra un ejemplo de una respuesta de error userinfo:HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Si un 401 no autorizado, o cualquier otra respuesta de error sin éxito se devuelve durante el proceso de vinculación, el error será no recuperable, el token recuperada será descartado y el usuario tendrá para iniciar el proceso de vinculación nuevamente. Si el token de acceso es válido, el retorno y la respuesta HTTP 200 con el siguiente objeto JSON en el cuerpo de la respuesta HTTPS:
{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
Si su userinfo de punto final devuelve una respuesta de éxito HTTP 200, el recuperado token y reclamaciones se registran en contra de Google del usuario cuenta.respuesta del punto final de userinfo sub
Una identificación única que identifica al usuario en su sistema. email
Dirección de correo electrónico del usuario. given_name
Opcional: Nombre del usuario. family_name
Opcional: Apellido del usuario. name
Opcional: Nombre completo del usuario. picture
Opcional: Foto del perfil de usuario.
Cómo validar la implementación
Puede validar su aplicación mediante el uso de la Zona de juegos OAuth 2.0 herramienta.
En la herramienta, siga los siguientes pasos:
- Haga clic en Configuración de para abrir la ventana de configuración de OAuth 2.0.
- En el campo de flujo de OAuth, seleccione el lado del cliente.
- En el campo de OAuth puntos finales, seleccione Personalizar.
- Especifique su punto final de OAuth 2.0 y el ID de cliente que asignó a Google en los campos correspondientes.
- En la sección Paso 1, no seleccione ninguna alcances de Google. En su lugar, deje este campo en blanco o escriba un ámbito válido para su servidor (o una cadena arbitraria si no utiliza ámbitos OAuth). Cuando haya terminado, haga clic en Autorizar API.
- En las secciones Paso 2 y el Paso 3, vaya a través del flujo de OAuth 2.0 y verificar que cada paso funciona como se pretende.
Puede validar su aplicación mediante el uso de la cuenta de Google Vinculación demostración herramienta.
En la herramienta, siga los siguientes pasos:
- Haga clic en el Inicio de sesión con el botón de Google.
- Elija la cuenta que desea vincular.
- Ingrese la identificación del servicio.
- Opcionalmente, ingrese uno o más ámbitos para los que solicitará acceso.
- Haga clic en Inicio de demostración.
- Cuando se le solicite, confirme que puede dar su consentimiento y rechazar la solicitud de vinculación.
- Confirme que se le redirige a su plataforma.