A partir de Chrome 123, puedes usar las Sugerencias de dominios junto con la API de Federated Credential Management (FedCM). Con la API de Domain Hint, los desarrolladores pueden ofrecer una mejor experiencia del usuario, ya que solo muestran las cuentas de acceso federadas del dominio que aceptan.
API de Domain Hint
FedCM se puede usar para facilitar el acceso de un usuario a un usuario de confianza (RP, en referencia a un sitio web) mediante la información de la cuenta que proporciona un proveedor de identidad (IdP). Sin embargo, hay casos en los que el RP ya sabe que solo las cuentas asociadas con un dominio determinado pueden acceder al sitio. Esto es particularmente común en situaciones empresariales en las que el sitio al que se accede está restringido a un dominio corporativo. Para brindar una mejor experiencia del usuario, la API de FedCM permite que la parte restringida solo muestre las cuentas que se pueden usar para acceder a la parte restringida. Esto evita situaciones en las que un usuario intenta acceder al RP con una cuenta fuera del dominio corporativo, solo para que se entregue un mensaje de error más tarde (o silencio cuando el acceso no funcionó) porque no se usó el tipo de cuenta correcto.
Con la API de Domain Hint, los RP pueden especificar una propiedad domainHint
en una llamada a la API de FedCM para mostrar solo las cuentas coincidentes del usuario. El IdP puede proporcionar una propiedad domain_hints
como parte de una respuesta del extremo de la lista de cuentas para indicar con qué dominios está asociada una cuenta. De esta manera, el navegador puede mostrar las cuentas coincidentes sin divulgar la sugerencia de dominio solicitada al IdP.
Una respuesta JSON de ejemplo del extremo de la lista de cuentas se vería de la siguiente manera:
{
"accounts": [{
"id": "1234",
"given_name": "John",
"name": "John Doe",
"email": "john_doe@idp.example",
"picture": "https://idp.example/profile/123",
"approved_clients": ["123", "456", "789"],
}, {
"id": "5678",
"given_name": "Johnny",
"name": "Johnny",
"email": "johnny@idp.example",
"picture": "https://idp.example/profile/456"
"approved_clients": ["abc", "def", "ghi"],
"domain_hints": ["corp.example"]
}]
}
El RP puede llamar a navigator.credentials.get()
con una propiedad domainHint
para filtrar las cuentas. Por ejemplo, supongamos que un usuario visita corp-partner.example
y accede con una cuenta de corp.example
. El sitio invocaría la API de la siguiente manera:
return await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/manifest.json",
clientId: "abc",
nonce: nonce,
domainHint : "corp.example"
}]
}
});
El valor domainHint
no se envía al extremo de la lista de cuentas para el filtrado del servidor, ya que puede ser un vector de creación de huellas digitales para el IdP.
En cambio, Chrome realiza una solicitud a FedCM como de costumbre y filtra las cuentas que no coinciden con el valor domainHint
especificado en la llamada navigator.credentials.get()
. Luego, Chrome le muestra al usuario el diálogo de FedCM con la lista de cuentas nuevas. Este enfoque es similar al de la API de Sugerencia de Acceso, pero estas dos APIs responden preguntas diferentes. La API de sugerencia de acceso busca responder “¿cuál es un identificador para el usuario que quiero?”, mientras que la sugerencia de dominio busca responder “¿a qué empresa o servidor debe pertenecer esta cuenta?”.
Cuando se usa domainHint: "any"
, Chrome filtra las cuentas que no tienen
ningún dominio (es decir, domain_hints
no se pasó o está vacío). Por ejemplo, esto permite casos de uso en los que el RP solo permite cuentas administradas en su proceso de registro.
Cuando ninguna cuenta coincide con domainHint
, el diálogo de FedCM muestra un mensaje de acceso, que permite al usuario acceder a una cuenta de IdP que coincida con la sugerencia solicitada por el RP. Cuando el usuario presiona el mensaje, se abre una ventana emergente con la URL de acceso especificada en el archivo de configuración. Luego, al vínculo se le agrega la sugerencia de acceso y los parámetros de consulta de la sugerencia de dominio.
![Un ejemplo de solicitud de acceso cuando no hay ninguna cuenta que coincida con DomainHint.](https://developers.google.cn/static/privacy-sandbox/assets/images/blog/fedcm-123.jpg?authuser=8&hl=es)
domainHint
.