Informations FedCM: Dissocier l'API et deux mises à jour

Dans Chrome 122, l'API Déconnecter pour les identifiants fédérés l'API Management (FedCM) est disponible. La L'API Déconnecter permet aux tiers de confiance de déconnecter leurs utilisateurs du au compte de votre fournisseur d'identité sans utiliser de cookies tiers. Vous pouvez aussi quelques modifications apportées à la gestion SameSite de FedCM.

Déconnecter l'API

Lorsqu'un utilisateur crée un compte sur un tiers de confiance, c'est-à-dire le site utilisant le fournisseur d'identité pour l'authentification) via la fédération d'identité, le service fournisseur (IdP) : le service qui fournit les informations d'authentification et de compte à d'autres parties) enregistre généralement la connexion sur son serveur. La classe permet à l'IdP de suivre les tiers assujettis à des restrictions auxquels l'utilisateur s'est connecté et à optimiser leur expérience. Par exemple, pour bénéficier d'une meilleure expérience revient ultérieurement au RP, le compte utilisateur avec le fournisseur d'identité est traité d'un compte connu, ce qui permet d'utiliser des fonctionnalités telles que la réauthentification boutons personnalisés indiquant le compte utilisé

Parfois, les fournisseurs d'identité proposent une API pour déconnecter le compte d'un tiers assujetti à des restrictions. Toutefois, le flux de déconnexion est authentifié et nécessite les cookies IdP. Dans un monde sans cookies tiers, lorsque l'utilisateur consulte le tiers assujetti à des restrictions, il n'y a pas de navigateur API permettant à la RP de se déconnecter du fournisseur d'identité. Comme il peut y avoir plusieurs IdP du même IdP associé à un tiers assujetti à des restrictions donné, le flux de déconnexion nécessite de savoir quel compte est déconnecté.

La déconnexion API permet à l'utilisateur de déconnecter le compte de l'IdP du tiers assujetti à des restrictions dans le navigateur sur le serveur IdP en le signalant au point de terminaison spécifié. L’utilisateur a besoin avoir effectué la fédération d'identité à l'aide de l'API Federated Credential API Management (FedCM). Une fois l'utilisateur déconnecté, il est considéré la prochaine fois qu'il tentera de se connecter au RP à l'aide du fournisseur d'identité.

Déconnecter l'IdP du tiers assujetti à des restrictions

Si un utilisateur s'est déjà connecté au tiers assujetti à des restrictions à l'aide du fournisseur d'identité via FedCM, le relation est mémorisée par le navigateur localement comme la liste des Google Cloud. Le tiers assujetti à des restrictions peut déclencher une déconnexion en appelant la méthode fonction IdentityCredential.disconnect(). Cette fonction peut être appelée à partir d'un cadre RP de premier niveau. Le tiers assujetti à des restrictions doit transmettre un configURL, le clientId qu'il utilise sous le fournisseur d'identité et un accountHint pour que celui-ci soit déconnecté. Un compte L'indice peut être une chaîne arbitraire tant que le point de terminaison de déconnexion peut identifier le compte, par exemple une adresse e-mail ou un ID utilisateur qui n'est pas nécessairement correspondent à l'ID de compte fourni par le point de terminaison de la liste de comptes:

// Disconnect an IdP account "account456" from the RP "https://idp.com/". This is invoked on the RP domain.
IdentityCredential.disconnect({
  configURL: "https://idp.com/config.json",
  clientId: "rp123",
  accountHint: "account456"
});

IdentityCredential.disconnect() renvoie un Promise. Cette promesse peut générer pour les raisons suivantes:

  • L'utilisateur ne s'est pas connecté au tiers assujetti à des restrictions à l'aide du fournisseur d'identité via FedCM.
  • L'API est appelée depuis un iFrame sans règle d'autorisation FedCM.
  • La configURL n'est pas valide ou ne contient pas de point de terminaison de déconnexion.
  • Échec de la vérification de la CSP (Content Security Policy).
  • Une demande de dissociation est en attente.
  • L'utilisateur a désactivé FedCM dans les paramètres du navigateur.

Lorsque le point de terminaison de déconnexion du IdP renvoie une , le RP et l'IdP sont déconnectés sur le navigateur et la promesse est faite. Les comptes utilisateur qui se déconnectent sont spécifié dans la réponse de la déconnexion, point de terminaison unique.

Configurer le fichier de configuration de l'IdP

Pour que l'API Déconnecter soit compatible, le fournisseur d'identité doit permettre la déconnexion et indiquez la propriété disconnect_endpoint et son chemin d'accès dans son IdP fichier de configuration.

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

Déconnecter le compte sur le point de terminaison de déconnexion

En appelant IdentityCredential.disconnect(), le navigateur envoie une requête multi-origine POST avec des cookies et un type de contenu application/x-www-form-urlencoded à ce point de terminaison de déconnexion avec le les informations suivantes:

Propriété Description
account_hint Indice pour le compte de l'IdP.
client_id Identifiant client du tiers assujetti à des restrictions.
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity

account_hint=account456&client_id=rp123

À la réception de la requête, le serveur IdP doit:

  1. Répondre à la requête avec CORS (Cross-Origin Resource) Partage).
  2. Vérifiez que la requête contient un en-tête HTTP Sec-Fetch-Dest: webidentity.
  3. Faites correspondre l'en-tête Origin avec l'origine de la RP déterminée par le client_id. Si ce n'est pas le cas, refusez-les.
  4. Recherchez le compte correspondant à l'account_hint.
  5. Déconnectez le compte utilisateur de la liste des comptes connectés du tiers assujetti à des restrictions.
  6. Répondre au navigateur avec le account_id de l'utilisateur identifié dans un fichier JSON .

Voici un exemple de charge utile JSON de réponse:

{
  "account_id": "account456"
}

Si le fournisseur d'identité souhaite que le navigateur déconnecte tous les comptes associés à le tiers assujetti à des restrictions, transmettez une chaîne qui ne correspond à aucun ID de compte, par exemple "*".

La vérification de /.well-known/web-identity est désormais ignorée lorsque le tiers assujetti à des restrictions et l'IdP sont sur le même site

Lors du développement d'un système FedCM, les domaines de serveur RP de test ou de préproduction peuvent être sous-domaines du serveur IdP de production. Par exemple, le serveur IdP de production se trouve sur idp.example, et le serveur RP et le serveur IdP de préproduction se trouvent à staging.idp.example. Cependant, puisque le fichier well-known doit être placé à la racine de l'eTLD+1 du serveur d'IdP, elle doit se trouver à idp.example/.well-known/web-identity. Il s'agit du serveur de production. Depuis les développeurs ne peuvent pas nécessairement placer des fichiers dans l'environnement de production en cours de développement, cela les empêche de tester FedCM.

À partir de Chrome 122, si le domaine RP et le domaine IdP sont identiques, Chrome ignore la vérification du fichier well-known. De cette façon, les développeurs seront en mesure de tester dans un tel scénario.

Les sous-ressources peuvent désormais définir l'état de la connexion SameSite

Auparavant, Chrome permettait uniquement de définir la connexion état (par par exemple, à l'aide de l'en-tête Set-Login: logged-in) lorsque la requête est même origine avec tous ses ancêtres. Cela empêchait les connexions via même-site Requêtes fetch() définissant l'état de connexion.

Par exemple, pensez à un site web qui permet aux utilisateurs de saisir leur nom d'utilisateur et mot de passe sur idp.example, mais les identifiants sont publiés sur login.idp.example avec fetch(). Enregistrement de l'état de la connexion dans le navigateur à l'aide de la colonne "État de la connexion" Impossible d'utiliser l'API, car les deux domaines sont multi-origines et situés sur le même site.

Avec ce changement, nous avons assoupli l'exigence selon laquelle l'API Login Status doit être même site avec tous les ancêtres et permet de définir l'exemple ci-dessus l'état de connexion de login.idp.example à l'aide d'un en-tête HTTP (Set-Login: logged-in) ;

Résumé

Avec l'API Déconnecter, FedCM peut désormais dissocier le tiers assujetti à des restrictions du fournisseur d'identité sans utiliser de cookies tiers. Pour ce faire, appelez IdentityCredential.disconnect() sur le tiers assujetti à des restrictions. Grâce à cette fonction, le navigateur envoie une requête au point de terminaison de déconnexion du fournisseur d'identité afin que celui-ci puisse mettre fin à sur le serveur, puis sur le navigateur.

Nous avons annoncé que la vérification /.well-known/web-identity était ignorée lorsque le tiers assujetti à des restrictions et le fournisseur d'identité sont le même site à des fins de test. De plus, définir une connexion via un en-tête de réponse HTTP de la sous-ressource d'IdP sur le même site est maintenant possible.