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:
- Répondre à la requête avec CORS (Cross-Origin Resource) Partage).
- Vérifiez que la requête contient un en-tête HTTP
Sec-Fetch-Dest: webidentity
. - Faites correspondre l'en-tête
Origin
avec l'origine de la RP déterminée par leclient_id
. Si ce n'est pas le cas, refusez-les. - Recherchez le compte correspondant à l'
account_hint
. - Déconnectez le compte utilisateur de la liste des comptes connectés du tiers assujetti à des restrictions.
- 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.