De forma predeterminada, el servicio de cuentas de Google accesible de forma externa controla la autenticación de las Cuentas de Google. Cuando un usuario no autenticado visita una página de Google que requiere autenticación, el formulario de acceso de Google solicita la dirección de correo electrónico y la contraseña del usuario. Después de que el usuario envía su correo electrónico y contraseña, la autenticación de Google verifica que las credenciales ingresadas sean correctas. Si las credenciales son correctas, la autenticación de Google establece las cookies de acceso del usuario.
Algunas empresas usan un modelo más sofisticado en el que un proveedor de identidad (IdP) externo controla la autenticación. La autenticación de Google admite este modelo a través del protocolo de lenguaje de marcado para confirmaciones de seguridad (SAML) estándar de la industria. Un administrador puede configurar un dominio para que use la autenticación SAML.
Cómo obtener la contraseña del usuario
ChromeOS necesita identificar la contraseña del usuario ingresada durante el acceso para hacer lo siguiente:
- Encripta los datos del usuario almacenados en la unidad de disco.
- Proteger la pantalla de bloqueo
- Habilita el acceso sin conexión cuando no haya accesibilidad a la red.
Cuando se usa SAML, la contraseña no se ingresa directamente en un diálogo del sistema de ChromeOS, sino dentro de una WebView alojada por el proveedor de identidad. Si bien ChromeOS tiene acceso al código HTML, no hay una forma canónica y sencilla de obtener la contraseña, ya que no está claro qué campos del formulario contienen los datos.
Existen dos formas de obtener la contraseña de un usuario cuando se usa SAML: la API de Credentials Passing y la extracción de contraseñas.
API de Chrome Credentials Passing
Google proporciona una API de Credentials Passing que los proveedores de identidad pueden implementar en las páginas de SAML, en JavaScript, para pasar los datos requeridos a ChromeOS. La autenticación de Google usa esta API, pero cualquier proveedor de identidad de SAML también podría usarla.
Extracción de contraseñas
Un proveedor de identidad SAML puede usar el scraping de contraseñas cuando no admite la API de Credentials Passing.
En este método, se hace lo siguiente:
- La pantalla de autenticación inserta un script de contenido en la WebView que aloja el proceso de acceso.
- La secuencia de comandos de contenido identifica los campos de entrada HTML de tipo contraseña y copia su contenido en un array. El array se actualiza cada vez que cambia el contenido de un campo de contraseña.
- Las contraseñas filtradas se envían a una página en segundo plano que las acumula. De esta manera, se puede capturar la contraseña incluso si el flujo de acceso abarca varios redireccionamientos a diferentes páginas HTML.
Al final del flujo de acceso, se recupera el array de contraseñas extraídas de la página en segundo plano. Se pueden dar tres casos: no se extrajo ninguna contraseña, se extrajo exactamente una contraseña o se extrajo más de una contraseña.
No se extrajo ninguna contraseña
La secuencia de comandos de contenido no puede ubicar la contraseña en las páginas HTML que publica el proveedor de identidad. Es posible que el proveedor de identidad no use contraseñas tradicionales.
En este caso, ChromeOS le pedirá al usuario que elija una contraseña manual para el dispositivo. Si la contraseña no existe (p.ej., autenticación con tarjetas inteligentes, NFC o biometría), el proceso de autenticación de ChromeOS puede continuar sin la contraseña.
Se extrajo exactamente una contraseña
El script de contenido identifica exactamente una contraseña. Lo más probable es que esta sea la contraseña del usuario que se usa para la autenticación.
En este caso, es muy probable que hayamos recuperado la contraseña del usuario correctamente. ChromeOS usará la contraseña extraída como la contraseña del usuario para continuar con el proceso de autenticación.
Se extrajo más de una contraseña
La secuencia de comandos de contenido identifica varias contraseñas. Esto puede ocurrir en circunstancias como cuando un proveedor de identidad requiere que un usuario ingrese una contraseña permanente y una contraseña de un solo uso en el formulario de acceso.
En este caso, probablemente extrajimos la contraseña real del usuario y algunos campos de contraseña adicionales que no son de interés para ChromeOS. Para determinar cuál es la contraseña correcta, ChromeOS le pedirá al usuario que la ingrese una vez más en una ventana adicional.
Si la contraseña ingresada coincide con una de las contraseñas extraídas, se identificó la contraseña real del usuario y continuará el proceso de autenticación. Si no hay coincidencias, se le pedirá al usuario que vuelva a ingresar su contraseña. Después de dos coincidencias incorrectas, el acceso falla y se muestra un mensaje de error.
Inscripción empresarial
En el caso de la inscripción empresarial, se necesita la dirección de correo electrónico del usuario que realiza la inscripción para asociar el dispositivo con el dominio correcto. El servidor de administración de dispositivos (DM) envía el correo electrónico a Chrome en el campo de nombre de usuario del mensaje PolicyData durante la recuperación de la política del dispositivo. No es necesario determinar la contraseña del usuario.