La versión más reciente de Google Identity Toolkit se lanzó como Identity Platform y Firebase Authentication. En el futuro, se congelará el trabajo en las funciones de Identity Toolkit. Todo el desarrollo de funciones nuevas se realizará en Identity Platform y Firebase Authentication. Alentamos a los desarrolladores de Identity Toolkit a migrar a estas plataformas tan pronto como sea práctico para sus aplicaciones.
Nuevas funciones
Identity Platform ya cuenta con mejoras significativas en las funciones en comparación con Google Identity Toolkit:
Nueva Consola del administrador
Identity Platform tiene una nueva consola para desarrolladores que te permite ver, modificar y borrar tus usuarios. Esto puede ser útil para depurar tus flujos de acceso y registro. La consola también te permite configurar métodos de autenticación y personalizar plantillas de correo electrónico.
Nuevos métodos de autenticación
Identity Platform admite estándares de federación empresarial, como SAML y OIDC, lo que te permite escalar apps y servicios de SaaS. Identity Platform también ofrece compatibilidad con proveedores como GitHub, Microsoft, Yahoo y muchos más. Puedes usar el acceso anónimo para crear un ID de usuario único sin necesidad de que el usuario realice ningún proceso de acceso o registro. Esto te permite realizar llamadas a la API autenticadas como lo harías con un usuario normal. Cuando el usuario decide registrarse para obtener una cuenta, se conserva toda la actividad con el mismo ID de usuario. Esto es valioso para situaciones como los carritos de compras del servidor o cualquier otra aplicación en la que desees interactuar con el usuario antes de enviarlo a través de un flujo de registro.
Escala con confianza con los Acuerdos de Nivel de Servicio y la asistencia de Cloud
Identity Platform se basa en la infraestructura confiable de Google y proporciona Acuerdos de Nivel de Servicio y asistencia de Google Cloud. Esto significa que puedes escalar tu servicio con confianza y depender de Google para que te proporcione la resiliencia, la disponibilidad y la escalabilidad que necesitas.
Acceso a todos los productos de Firebase
Firebase es una plataforma para dispositivos móviles que te permite desarrollar rápidamente apps de alta calidad, ampliar tu base de usuarios y ganar más dinero. Firebase se compone de funciones complementarias que puedes combinar para satisfacer tus necesidades y que incluyen infraestructura para análisis de dispositivos móviles, mensajería en la nube, base de datos en tiempo real, almacenamiento de archivos, alojamiento estático, configuración remota, informes de fallas para dispositivos móviles y pruebas para Android.
IU actualizadas
Reconstruimos por completo los flujos de la IU según la investigación de UX más reciente de Google. Esto incluye la recuperación de contraseñas, la vinculación de cuentas y los flujos de desambiguación de cuentas nuevas o existentes, que suelen requerir mucho tiempo para codificar y depurar. Integra Smart Lock para contraseñas en Android, lo que mejoró significativamente la conversión de acceso y registro para las apps participantes. También admite modificaciones sencillas del tema para que coincida con tu aplicación y, para lograr la máxima personalización, se publicó el código fuente de las versiones para Android y iOS.
Configuración simplificada del servidor
Con Identity Toolkit, observamos que muchos desarrolladores optaron por no implementar el flujo de recuperación de correo electrónico, lo que imposibilitó que sus usuarios recuperaran sus cuentas si olvidaban sus contraseñas. Identity Platform puede enviar mensajes de verificación de correo electrónico, restablecimiento de contraseña y cambio de contraseña al usuario, y el texto se puede personalizar fácilmente para tus usuarios. Además, ya no es necesario que alojes los widgets de IU para alojar redireccionamientos y completar operaciones de cambio de contraseña.
Nuevos SDKs
Todas las APIs del servidor de Identity Toolkit ahora están disponibles de forma nativa con cada una de nuestras bibliotecas cliente (Android, iOS y web). Los desarrolladores podrán acceder y registrar usuarios nuevos y antiguos, acceder a las propiedades del usuario, vincular, actualizar y borrar cuentas, restablecer contraseñas y mucho más sin estar vinculados a una IU fija. Si lo prefieres, puedes compilar manualmente todo tu propio flujo y experiencia de acceso sobre esta API.
Administración de sesiones para aplicaciones para dispositivos móviles
Con Identity Toolkit, las apps creaban su propio estado de sesión en función del evento de autenticación inicial de Identity Toolkit. Identity Platform usa un servicio de backend que toma un token de actualización, generado a partir del evento de autenticación, y lo intercambia por tokens de acceso de una hora para Android, iOS y JavaScript. Cuando un usuario cambia su contraseña, los tokens de actualización ya no podrán generar tokens de acceso nuevos, lo que inhabilitará el acceso hasta que el usuario se vuelva a autenticar en ese dispositivo.
Diferencias entre las funciones
Actualmente, algunas funciones de Identity Toolkit no están disponibles en Identity Platform, mientras que otras se rediseñaron y funcionan de manera diferente. Es posible que decidas no migrar de inmediato si estas funciones son importantes para tu app. En muchos casos, es posible que estas funciones no sean importantes para tu app o que haya alternativas sencillas que te permitan continuar con la migración.
Diferencias del servidor
El servicio principal de Identity Toolkit, con sus API de REST subyacentes, la lógica de validación de cuentas y la base de datos de usuarios principal, solo se sometió a actualizaciones menores. Sin embargo, cambiaron algunas funciones y la forma en que integras Identity Platform en tu servicio.
Proveedores de identidad
No se admiten PayPal ni AOL. Los usuarios con cuentas de estos IDP aún pueden acceder a tu aplicación con el flujo de recuperación de contraseñas y configurar una contraseña para su cuenta.
Bibliotecas del servidor
Actualmente, hay SDKs de Admin disponibles para Java, Node.js, Python, Go y C#.
Correos electrónicos de administración de cuentas
Firebase o el servidor de correo electrónico propio del desarrollador pueden realizar los mensajes de restablecimiento de contraseña, verificación de correo electrónico y cambio de correo electrónico. Actualmente, las plantillas de correo electrónico solo ofrecen una personalización limitada desde la IU, pero se pueden personalizar aún más con los SDKs de Admin.
Confirmación del cambio de dirección de correo electrónico
En Identity Toolkit, cuando un usuario decide cambiar su dirección de correo electrónico, se envía un correo electrónico a la nueva dirección con un vínculo para continuar el flujo de cambio de dirección de correo electrónico.
Firebase confirma el cambio de dirección de correo electrónico enviando un correo electrónico de revocación a la dirección anterior con un vínculo para revertir el cambio.
Lanzamiento del IDP
Identity Toolkit tenía la capacidad de agregar proveedores de identidad a tu sistema de acceso de forma gradual, de modo que pudieras experimentar con el impacto en tus solicitudes de asistencia. Se quitó esta función de Firebase Authentication.
Diferencias del cliente
En Identity Platform, las funciones que proporciona Google Identity Toolkit se dividen en dos componentes:
SDKs de cliente y servidor
En Identity Platform, la funcionalidad que proporciona la API de REST de Identity Toolkit se empaquetó en SDKs de cliente disponibles para Android, iOS y JavaScript. Puedes usar el SDK para acceder y registrar usuarios, acceder a la información del perfil del usuario, vincular, actualizar y borrar cuentas, y restablecer contraseñas con el SDK del cliente en lugar de comunicarte con el servicio de backend a través de llamadas a la API de REST.
Widget de IU
Todos los flujos de la IU que administran el acceso, el registro, la recuperación de contraseñas y la vinculación de cuentas se recompilaron con los SDKs de cliente y se empaquetaron como un widget de acceso. Están disponibles como SDKs de código abierto para iOS, Android y Web, y te permiten personalizar por completo los flujos de formas que no son posibles con Identity Toolkit.
Entre las diferencias adicionales, se incluyen las siguientes:
Sesiones y migración
Dado que las sesiones se administran de manera diferente en Identity Toolkit y en Identity Platform, las sesiones existentes de tus usuarios finalizarán cuando actualices el SDK, y tus usuarios deberán volver a acceder.
Antes de comenzar
Antes de migrar de Identity Toolkit a Identity Platform, debes hacer lo siguiente:
Abre la consola de Cloud y selecciona tu proyecto de Identity Toolkit.
En Marketplace, busca Identity Platform y selecciona "Habilitar Identity Platform".
Abre la Cuentas de servicio. Aquí puedes ver la cuenta de servicio que configuraste anteriormente para Identity Toolkit.
Junto a la cuenta de servicio, haz clic en more_vert > Crear clave. Luego, en el diálogo Crear clave privada, establece el tipo de clave en JSON y haz clic en Crear. Se descargará un archivo JSON que contiene las credenciales de tu cuenta de servicio. Lo necesitarás para inicializar el SDK en el siguiente paso.
Regresa a la consola de Cloud. En la sección Providers, dentro del método de acceso "Correo electrónico/contraseña", abre la página Plantillas de correo electrónico. Luego, puedes personalizar las plantillas de tu app.
En Identity Toolkit, cuando los usuarios restablecían contraseñas, cambiaban direcciones de correo electrónico o verificaban sus direcciones de correo electrónico, debías obtener un código OOB del servidor de Identity Toolkit y, luego, enviárselo a los usuarios por correo electrónico. Identity Platform envía correos electrónicos según las plantillas que configures sin necesidad de realizar acciones adicionales.
Opcional: Si necesitas acceder a los servicios de Identity Platform en tu servidor, instala el SDK de Firebase.
Puedes instalar el SDK de Admin para Node.js con
npm
:$ npm init $ npm install --save firebase-admin
En tu código, puedes acceder a Firebase de la siguiente manera:
var admin = require('firebase-admin'); var app = admin.initializeApp({ credential: admin.credential.cert('path/to/serviceAccountCredentials.json') });
A continuación, completa los pasos de migración para la plataforma de tu app: Android, iOS o web.
Servidores y JavaScript
Cambios importantes
Existen varias diferencias adicionales entre la implementación web de Identity Platform y la de Identity Toolkit.
Administración de sesiones web
Anteriormente, cuando un usuario se autenticaba con el widget de Identity Toolkit, se establecía una cookie para el usuario que se utilizaba para iniciar la sesión. Esta cookie tenía una vida útil de dos semanas y se usaba para permitir que el usuario usara el widget de administración de cuentas para cambiar la contraseña y la dirección de correo electrónico. Algunos sitios usaban esta cookie para autenticar todas las demás solicitudes de páginas en el sitio. Otros sitios utilizaron la cookie para crear sus propias cookies a través del sistema de administración de cookies de su framework.
Los SDKs de cliente de Identity Platform ahora administran los tokens de ID y funcionan con el backend de Identity Platform para mantener la sesión actualizada. El backend hace que venzan las sesiones cuando se producen cambios importantes en la cuenta (como cambios en la contraseña del usuario). Los tokens de ID no se establecen automáticamente como cookies en el cliente web y tienen una vida útil de solo una hora. A menos que desees sesiones de solo una hora, los tokens de ID no son adecuados para usarse como la cookie para validar todas las solicitudes de página. En cambio, deberás configurar un objeto de escucha para cuando el usuario acceda, obtener el token de ID, validar el token y crear tu propia cookie a través del sistema de administración de cookies de tu framework.
Deberás establecer la vida útil de la sesión de tu cookie según las necesidades de seguridad de tu aplicación.
Flujo de acceso web
Anteriormente, se redireccionaba a los usuarios a
accountchooser.com
cuando se iniciaba el acceso para saber qué identificador quería usar el usuario. El flujo de la IU de Identity Platform ahora comienza con una lista de métodos de acceso, incluida una opción de correo electrónico que va aaccountchooser.com
para la Web y usa la API de hintRequest en Android. Además, ya no se requieren direcciones de correo electrónico en la IU. Esto facilitará la compatibilidad con usuarios anónimos, usuarios de autenticación personalizada o usuarios de proveedores en los que no se requieren direcciones de correo electrónico.Widget de administración de cuentas
Este widget proporciona una IU para que los usuarios cambien sus direcciones de correo electrónico, contraseñas o desvinculen sus cuentas de los proveedores de identidad. Actualmente, se encuentra en desarrollo.
Botón o widget de acceso
Ya no se proporcionan widgets como el botón de acceso y la tarjeta de usuario. Se pueden compilar muy fácilmente con la API de Firebase Authentication.
No hay signOutUrl
Deberás llamar a
firebase.auth.signOut()
y controlar la devolución de llamada.No oobActionUrl
Identity Platform ahora controla el envío de correos electrónicos y se configura en Firebase console.
Personalización de CSS
El widget de IU usa el diseño de Material Design Lite, que agrega animaciones de Material Design de forma dinámica.
Paso 1: Cambia el código del servidor
Si tu servidor depende del token de Identity Toolkit (válido por dos semanas) para administrar las sesiones de los usuarios web, debes convertir el servidor para que use su propia cookie de sesión.
- Implementa un extremo para validar el token de ID y establecer la cookie de sesión para el usuario. La app cliente envía el token de ID de Firebase a este extremo.
- Si la solicitud entrante contiene tu propia cookie de sesión, puedes considerar que el usuario está autenticado. De lo contrario, trata la solicitud como no autenticada.
- Si no quieres que ninguno de tus usuarios pierda sus sesiones existentes, debes esperar dos semanas para que venzan todos los tokens de Identity Toolkit o realizar la validación de tokens duales para tu aplicación web, como se describe en el paso 3 a continuación.
A continuación, dado que los tokens de ID son diferentes de los tokens de Identity Toolkit, debes actualizar la lógica de validación de tokens. Instala el SDK de Admin en tu servidor o, si usas un lenguaje que no es compatible con el SDK de Admin, descarga una biblioteca de validación de tokens JWT para tu entorno y valida el token correctamente.
Cuando realices las actualizaciones anteriores por primera vez, es posible que aún tengas rutas de código que dependan de los tokens de Identity Toolkit. Si tienes aplicaciones para iOS o Android, los usuarios deberán actualizar a la nueva versión de la app para que funcionen las nuevas rutas de acceso de código. Si no quieres obligar a los usuarios a actualizar tu app, puedes agregar lógica de validación del servidor adicional que examine el token y determine si debe usar el SDK de Firebase o el SDK de Identity Toolkit para validarlo. Si solo tienes una aplicación web, todas las solicitudes de autenticación nuevas se transferirán a Identity Platform y, por lo tanto, solo deberás usar los métodos de verificación de tokens de ID.
Consulta la referencia de la API web.
Paso 2: Actualiza tu código HTML
Agrega el código de inicialización a tu app:
- Abre tu proyecto en la consola de Cloud.
- En la página providers, haz clic en Application Setup Details. Se muestra un fragmento de código que inicializa Identity Platform.
- Copia y pega el fragmento de inicialización en tu página web.
Agrega el widget de autenticación a tu app:
<script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script> <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" /> <!-- ******************************************************************************************* * TODO(DEVELOPER): Paste the initialization snippet from: * Firebase Console > Overview > Add Firebase to your web app. * ***************************************************************************************** --> <script type="text/javascript"> // FirebaseUI config. var uiConfig = { 'signInSuccessUrl': '<url-to-redirect-to-on-success>', 'signInOptions': [ // Leave the lines as is for the providers you want to offer your users. firebase.auth.GoogleAuthProvider.PROVIDER_ID, firebase.auth.FacebookAuthProvider.PROVIDER_ID, firebase.auth.TwitterAuthProvider.PROVIDER_ID, firebase.auth.GithubAuthProvider.PROVIDER_ID, firebase.auth.EmailAuthProvider.PROVIDER_ID ], // Terms of service url. 'tosUrl': '<your-tos-url>', }; // Initialize the FirebaseUI Widget using Firebase. var ui = new firebaseui.auth.AuthUI(firebase.auth()); // The start method will wait until the DOM is loaded. ui.start('#firebaseui-auth-container', uiConfig); </script>
Quita el SDK de Identity Toolkit de tu app.
Si utilizaste el token de ID de Identity Toolkit para la administración de sesiones, debes realizar los siguientes cambios en el cliente:
Después de acceder correctamente con Identity Platform, obtén un token de ID llamando a
firebase.auth().currentUser.getToken()
.Envía el token de ID al servidor de backend, valídalo y emite tu propia cookie de sesión.
No confíes únicamente en la cookie de sesión cuando realices operaciones sensibles o envíes solicitudes de edición autenticadas a tu servidor. Deberás proporcionar protección adicional contra la falsificación de solicitudes entre sitios (CSRF).
Si tu framework no proporciona protección contra CSRF, una forma de evitar un ataque sería obtener un token de ID para el usuario que accedió con
getToken()
y, luego, incluir el token en cada solicitud (la cookie de sesión también se enviará de forma predeterminada). Luego, validarías ese token con el SDK de Admin, además de la verificación de la cookie de sesión que completó tu framework de backend. Esto dificultará el éxito de los ataques CSRF, ya que el token de ID solo se almacena con el almacenamiento web y nunca en una cookie.Los tokens de Identity Toolkit son válidos durante dos semanas. Es posible que desees seguir emitiendo tokens que duren dos semanas o que quieras que duren más o menos según los requisitos de seguridad de tu app. Cuando un usuario salga de su cuenta, borra la cookie de sesión.
Paso 3: Actualiza las URLs de redireccionamiento del IdP
En la consola de Cloud, abre la sección Proveedores.
Para cada proveedor de acceso federado que admitas, haz lo siguiente:
- Haz clic en el nombre del proveedor de acceso.
- Copia el URI de redireccionamiento de OAuth.
- En la consola para desarrolladores del proveedor de acceso, actualiza el URI de redireccionamiento de OAuth.
Android
Paso 1: Agrega Identity Platform a tu app con Firebase
Abre la consola de Cloud y selecciona tu proyecto de Identity Toolkit.
En la página Providers, haz clic en Application setup details, selecciona la pestaña Android y, luego, haz clic en Get Started in Firebase. En el diálogo Add Firebase, proporciona el nombre del paquete y la huella digital del certificado de firma de tu app, y haz clic en Add App. Luego, se descargará el archivo de configuración
google-services.json
en tu computadora.Copia el archivo de configuración en el directorio raíz del módulo de tu app para Android. Este archivo de configuración contiene información del proyecto y del cliente de OAuth de Google.
En el archivo
build.gradle
a nivel del proyecto (<var>your-project</var>/build.gradle
), especifica el nombre del paquete de tu app en la seccióndefaultConfig
:defaultConfig { ….. applicationId "com.your-app" }
También en tu archivo
build.gradle
a nivel del proyecto, agrega una dependencia para incluir el complemento de google-services:buildscript { dependencies { // Add this line classpath 'com.google.gms:google-services:3.0.0' } }
En el archivo
build.gradle
de nivel de la app (<var>my-project</var>/<var>app-module</var>/build.gradle
), agrega la siguiente línea después del complemento de Gradle para Android para habilitar el complemento de google-services:apply plugin: 'com.android.application' // Add this line apply plugin: 'com.google.gms.google-services'
El complemento google-services usa el archivo
google-services.json
para configurar tu aplicación para que use Firebase.También en el archivo
build.gradle
a nivel de la app, agrega la dependencia de Firebase Authentication:compile 'com.google.firebase:firebase-auth:24.0.1' compile 'com.google.android.gms:play-services-auth:21.4.0'
Paso 2: Quita el SDK de Identity Toolkit
- Quita la configuración de Identity Toolkit del archivo
AndroidManifest.xml
. Esta información se incluye en el archivogoogle-service.json
y la carga el complemento google-services. - Quita el SDK de Identity Toolkit de tu app.
Paso 3: Agrega FirebaseUI a tu app
Agrega FirebaseUI Auth a tu app.
En tu app, reemplaza las llamadas al SDK de Identity Toolkit por llamadas a FirebaseUI.
iOS
Paso 1: Agrega Firebase a tu app
Ejecuta los siguientes comandos para agregar el SDK cliente a tu app:
$ cd your-project directory $ pod init $ pod 'Firebase'
Abre la consola de Cloud y selecciona tu proyecto de Identity Toolkit.
En la página Providers, haz clic en Application setup details, selecciona la pestaña iOS y, luego, haz clic en Get Started in Firebase. En el diálogo Add Firebase, proporciona el nombre del paquete y la huella digital del certificado de firma de tu app, y haz clic en Add App. Luego, se descargará el archivo de configuración
google-services.json
en tu computadora. En el diálogo Add Firebase, proporciona el ID de paquete y el ID de App Store de tu app y, luego, haz clic en Add App. Luego, se descargará el archivo de configuraciónGoogleService-Info.plist
en tu computadora. Si tienes varios IDs de paquete en tu proyecto, cada uno de ellos debe estar conectado en Firebase console para que pueda tener su propio archivoGoogleService-Info.plist
.Copia el archivo de configuración en la raíz de tu proyecto de Xcode y agrégalo a todos los destinos.
Paso 2: Quita el SDK de Identity Toolkit
- Quita
GoogleIdentityToolkit
del Podfile de tu app. - Ejecuta el comando
pod install
.
Paso 3: Agrega FirebaseUI a tu app
Agrega FirebaseUI Auth a tu app.
En tu app, reemplaza las llamadas al SDK de Identity Toolkit por llamadas a FirebaseUI.