Actualizaciones de FedCM: API de Domain Hint

En Chrome 123, puedes usar las sugerencias de dominio junto con la API de Federated Credential Management (FedCM). Con la API de Domain Hint, los desarrolladores pueden proporcionar una mejor experiencia del usuario, ya que solo muestran las cuentas de acceso federado del dominio que aceptan.

API de Domain Hint

Se puede usar FedCM 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 proporcionar una mejor experiencia del usuario, la API de FedCM permite que el RP solo muestre las cuentas que se pueden usar para acceder al RP. Esto evita situaciones en las que un usuario intenta acceder a la RP con una cuenta fuera del dominio corporativo y, luego, recibe un mensaje de error (o silencio si el acceso no funcionó) porque no se usó el tipo correcto de cuenta.

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 que coincidan con el usuario. La AC 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 huellas digitales para la AC. En su lugar, Chrome realiza una solicitud de FedCM como de costumbre y filtra las cuentas que no coinciden con el valor de domainHint especificado por la llamada a 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 Login Hint, pero estas dos APIs responden preguntas diferentes. La API de Access Hint busca responder “¿Cuál es un identificador para el usuario que quiero?”, mientras que Sugerencia de dominio intenta responder “¿A qué corporación o servidor debe pertenecer esta cuenta?”.

Cuando se usa domainHint: "any", Chrome filtra las cuentas que no tienen ningún dominio (es decir, no se pasa domain_hints o está vacío). Por ejemplo, esto permite casos de uso en los que la parte restringida solo permite cuentas administradas en su proceso de registro.

Cuando no hay cuentas que coincidan con el domainHint, en el diálogo de FedCM se mostrará una solicitud de acceso, que le permite al usuario acceder a una cuenta IdP que coincida con la sugerencia solicitada por la RP. Cuando el usuario presiona la indicación, se abre una ventana emergente con la URL de acceso especificada en el archivo de configuración. Luego, se agrega al vínculo la sugerencia de acceso y los parámetros de consulta de la sugerencia de dominio.

Ejemplo de una solicitud de acceso cuando no hay cuentas que coincidan con el campo DomainHint.
Ejemplo de un mensaje de acceso cuando no hay cuentas que coincidan con el domainHint.