Actualizaciones de FedCM: API de Domain Hint

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.
Un ejemplo de solicitud de acceso cuando no hay cuentas que coincidan con domainHint.