Mises à jour FedCM: API Domain Hint

À partir de Chrome 123, vous pouvez utiliser les indices de domaine avec l'API Federated Credential Management (FedCM). Avec l'API Domain Hint, les développeurs peuvent améliorer l'expérience utilisateur en n'affichant que les comptes de connexion fédérée du domaine qu'ils acceptent.

API Domain Hint

Le FedCM permet à un utilisateur de se connecter plus facilement à une partie de confiance (RP, faisant référence à un site Web) à l'aide d'informations de compte fournies par un fournisseur d'identité (IdP). Toutefois, dans certains cas, le tiers assujetti à des restrictions sait déjà que seuls les comptes associés à un domaine donné sont autorisés à se connecter au site. Cela est particulièrement courant dans les scénarios d'entreprise où le site auquel on accède est limité à un domaine d'entreprise. Afin d'améliorer l'expérience utilisateur, l'API FedCM permet au tiers assujetti à des restrictions d'afficher uniquement les comptes pouvant être utilisés pour s'y connecter. Cela permet d'éviter les scénarios dans lesquels un utilisateur tente de se connecter au tiers assujetti à des restrictions à l'aide d'un compte extérieur au domaine de l'entreprise, pour ne recevoir qu'un message d'erreur plus tard (ou passer sous silence lorsque la connexion n'a pas fonctionné), car le type de compte approprié n'a pas été utilisé.

Avec l'API Domain Hint, les RP peuvent spécifier une propriété domainHint sur un appel d'API FedCM pour n'afficher que les comptes correspondants de l'utilisateur. Le fournisseur d'identité peut fournir une propriété domain_hints dans une réponse du point de terminaison de la liste des comptes pour indiquer le ou les domaines auxquels un compte est associé. De cette manière, le navigateur peut afficher les comptes correspondants sans divulguer l'indice de domaine demandé au fournisseur d'identité.

Voici un exemple de réponse JSON du point de terminaison de la liste des comptes :

{
 "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"]
  }]
}

Le RP peut appeler navigator.credentials.get() avec une propriété domainHint pour filtrer les comptes. Par exemple, supposons qu'un utilisateur consulte corp-partner.example et se connecte avec un compte corp.example. Le site appelle l'API comme suit :

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

La valeur domainHint n'est pas envoyée au point de terminaison de la liste de comptes pour le filtrage côté serveur, car cela peut constituer un vecteur d'empreinte digitale pour l'IDP. À la place, Chrome effectue une requête FedCM comme d'habitude et filtre les comptes qui ne correspondent pas à la valeur domainHint spécifiée par l'appel navigator.credentials.get(). Chrome affiche ensuite la boîte de dialogue FedCM à l'utilisateur avec la liste des nouveaux comptes. Cette approche est semblable à l'API Login Hint, mais ces deux API répondent à des questions différentes. L'API Login Hint vise à déterminer quel est l'identifiant de l'utilisateur que je souhaite, tandis que Domain Hint cherche à déterminer à quelle entreprise ou à quel serveur ce compte doit-il appartenir ?".

Lorsque domainHint: "any" est utilisé, Chrome filtre les comptes qui ne possèdent aucun domaine (c'est-à-dire que domain_hints n'est pas transmis ou est vide). Par exemple, cela permet les cas d'utilisation où le tiers assujetti à des restrictions n'autorise que les comptes gérés dans son processus d'inscription.

Lorsqu'aucun compte ne correspond à domainHint, la boîte de dialogue FedCM affiche une invite de connexion, qui permet à l'utilisateur de se connecter à un compte d'IDP correspondant à l'indice demandé par le RP. Lorsque l'utilisateur appuie sur l'invite, une fenêtre pop-up s'ouvre avec l'URL de connexion spécifiée dans le fichier de configuration. Le lien est ensuite ajouté avec l'indice de connexion et les paramètres de requête de l'optimisation du domaine.

Exemple d'invite de connexion lorsqu'aucun compte ne correspond à domainHint.
Exemple d'invite de connexion lorsqu'aucun compte ne correspond à domainHint