Fonctionnalités touchées
Les changements apportés à la liaison de comptes sont les suivants :-
Vous ne pouvez plus utiliser un ID token dans l’en-tête
Authorization; vous devez utiliser un access token à la place. -
Si vous utilisez un access token dans l’en-tête
Authorizationavecupdate:userscomme permission accordée, vous pouvez envoyer dans le corps de la request soit leuser_id, soit l’ID token du compte secondaire. -
Si vous utilisez un access token dans l’en-tête
Authorizationavecupdate:current_user_metadatacomme permission accordée, vous pouvez seulement envoyer l’ID token du compte secondaire dans le corps de la request. -
Si vous envoyez l’ID token du compte secondaire dans le corps de la request (les cas d’utilisation décrits dans les deux puces précédentes), les conditions suivantes doivent être respectées :
- L’ID token doit être signé à l’aide de
RS256(vous pouvez définir cette valeur dans Dashboard > Clients > Client Settings > Advanced Settings > OAuth. - Le claim
audde l’ID Token doit identifier le client et avoir la même valeur que le claimazpde l’access token.
- L’ID token doit être signé à l’aide de
-
Pour dissocier des comptes, vous ne pouvez plus utiliser un ID token dans l’en-tête
Authorization. Vous devez utiliser un access token à la place.
Actions
Passez en revue tous vos appels au point de terminaison Identities pour la liaison de comptes et mettez à jour ceux qui utilisent le flux vulnérable décrit ci-dessus. Vous pouvez mettre à jour vos appels de l’une des façons suivantes :- Scénarios de liaison côté client / lancés par l’utilisateur : Pour les scénarios de liaison côté client, effectuez la requête vers le point de terminaison Identities à l’aide d’un jeton d’accès avec la portée
update:current_user_identities, et fournissez le jeton ID du compte secondaire dans la charge utile (link_with). Ce jeton ID doit être obtenu au moyen d’un flux conforme à /OIDC. - Scénarios de liaison côté serveur : Pour les scénarios de liaison côté serveur, effectuez la requête vers le point de terminaison Identities à l’aide d’un jeton d’accès avec la portée
update:userset fournissez leuser_iddu compte secondaire dans la charge utile.
Lier des comptes d’utilisateur
Pour lier des comptes d’utilisateur, vous pouvez soit effectuer une requête au point de terminaison Link a User Account de l’, soit utiliser la bibliothèque auth0.js.Lier les comptes de l’utilisateur courant avec la Management API
Un cas d’utilisation courant consiste à permettre à l’utilisateur connecté de lier ses comptes à l’aide de votre application. Avant la dépréciation, vous pouviez utiliser l’ID token ou le jeton d’accès de l’utilisateur principal (qui contenait la portéeupdate:current_user_identities) pour vous authentifier auprès de la Management API et utiliser le endpoint Link a User Account.
Vous devez maintenant obtenir un jeton d’accès (contenant la portée update:current_user_identities) et l’utiliser pour vous authentifier auprès de l’API afin d’utiliser l’endpoint Link a User Account. La charge utile doit être l’ID token de l’utilisateur secondaire.
-
Obtenez un jeton d’accès avec la portée
update:current_user_identities, comme dans l’exemple suivant. L’exemple utilise le flux implicite, mais vous pouvez obtenir des jetons d’accès pour tout type d’application. - Avec l’ancienne méthode utilisant un ID token, votre code ressemblerait à ceci : Avec la nouvelle méthode utilisant un jeton d’accès, votre code ressemblera à ceci :
-
Pour obtenir un jeton d’accès qui peut accéder à la Management API :
-
Définissez
audiencesurhttps://{yourDomain}/api/v2/. -
Demandez le
scope${scope}. -
Définissez
response_typesurid_token tokenafin qu’Auth0 envoie à la fois un ID token et un jeton d’accès. Si nous décodons le jeton d’accès et examinons son contenu, nous pouvons voir ce qui suit : Remarquez queaudest défini sur l’URI de l’API de votre tenant,scopesur${scope}etsubsur l’ID de l’utilisateur connecté.
-
Définissez
-
Les conditions suivantes doivent être respectées :
- L’ID token du compte secondaire doit être signé avec
RS256. - La claim
auddans l’ID token du compte secondaire doit identifier le client et avoir la même valeur que la claimazpdu jeton d’accès utilisé pour effectuer la requête.
- L’ID token du compte secondaire doit être signé avec
-
Une fois que vous avez le jeton d’accès, vous pouvez l’utiliser pour lier des comptes d’utilisateur. Cette partie reste inchangée : rien d’autre ne change dans la requête, sauf la valeur utilisée comme jeton
Bearer. La réponse demeure également la même.
Lier les comptes de l’utilisateur actuel avec auth0.js
Si vous utilisez la bibliothèque auth0.js pour accéder à la Management API et lier des comptes, vous utilisez probablement le ID token de l’identité principale de l’utilisateur pour instancierauth0.Management et l’utiliser pour lier des comptes.
-
Obtenez un jeton d’accès avec le scope
update:current_user_identities, puis utilisez ce jeton pour instancierauth0.Management. La requête finale àlinkUserreste la même. -
Avec l’ancienne méthode utilisant un ID token, votre code ressemblerait à ceci :
Avec la nouvelle méthode utilisant un jeton d’accès, votre code ressemblera à ceci :
- Demande à la fois un ID token et un jeton d’accès dans la réponse (
responseType: `token id_token`). - Définit la Management API comme audience du jeton (
audience: `https://YOUR_DOMAIN/api/v2/`). - Demande la permission requise (
scope: `update:current_user_identities`). - S’authentifie auprès de la Management API à l’aide du jeton d’accès.
- Demande à la fois un ID token et un jeton d’accès dans la réponse (
Lier n’importe quel compte d’utilisateur avec la Management API
Si vous obtenez un jeton d’accès pour la liaison de comptes qui contient le scopeupdate:users et que vous envoyez le user_id et le provider du compte secondaire dans la requête, vous n’avez rien à changer.
Cependant, cette nouvelle méthode offre une autre possibilité. Vous utilisez toujours un jeton d’accès contenant le scope update:users pour vous authentifier auprès de l’API, mais dans le payload de la requête, vous pouvez envoyer le jeton d’ID du compte secondaire (au lieu de user_id et provider).
Vous utilisez l’Auth0 CLI ? Si ce n’est pas déjà fait, configurez et authentifiez votre session CLI avant d’exécuter cette commande.
- Le jeton d’ID du compte secondaire doit être signé avec
RS256. - Le claim
auddu jeton d’ID du compte secondaire doit identifier le client et avoir la même valeur que le claimazpdu jeton d’accès utilisé pour effectuer la requête.
Dissocier des comptes d’utilisateur
Si vous utilisez des jetons ID pour dissocier des comptes, vous devez mettre à jour votre code afin d’utiliser des jetons d’accès.-
Vous devez d’abord obtenir un jeton d’accès avec la portée
update:current_user_identities. - Avec l’ancienne méthode utilisant un jeton ID, votre code ressemblerait à ceci : Avec la nouvelle méthode utilisant un jeton d’accès, votre code ressemblera à ceci :
-
Pour obtenir un jeton d’accès permettant d’accéder à la Management API :
-
Définissez
audiencesurhttps://{yourDomain}/api/v2/. -
Demandez la
scope${scope}. -
Définissez
response_typesurid_token tokenafin qu’Auth0 envoie à la fois un jeton ID et un jeton d’accès. Si nous décodons le jeton d’accès et en examinons le contenu, nous pouvons voir ce qui suit : Notez queaudest défini sur l’URI de l’API de votre tenant, quescopeest défini surupdate:current_user_identitieset quesubcorrespond à l’ID utilisateur de l’utilisateur connecté.
-
Définissez
-
Une fois le jeton d’accès obtenu, vous pouvez envoyer une requête au point de terminaison Dissocier une identité d’utilisateur de la Management API, en l’incluant dans l’en-tête
Authorization. -
Avec l’ancienne méthode, votre requête ressemblerait à ceci :
Avec la nouvelle méthode, votre requête ressemblera à ceci :
Considérations de sécurité
Nous avons identifié une faiblesse dans un flux particulier de liaison de comptes qui pourrait être exploitée de façon abusive dans certaines circonstances. Nous n’avons trouvé aucune preuve d’utilisation malveillante, mais nous avons décidé de retirer ce flux afin d’éviter que cela ne se produise. Par conséquent, Auth0 exige que les clients qui utilisent le flux de liaison de comptes touché migrent vers une mise en œuvre plus sécuritaire avant le 19 octobre 2018. Des options de migration sont fournies dans ce guide et ne devraient entraîner aucune perte de fonctionnalité. À compter du 19 octobre 2018, le flux de liaison de comptes touché sera désactivé et vous obtiendrez des erreurs à l’exécution. Vous êtes touché si vous envoyez une requête au endpoint Post Identities à l’aide d’un token (ID ou jeton d’accès) avec la portéeupdate:current_user_identities dans l’en-tête Authorization et incluez le user_id du compte secondaire dans la charge utile. Aucun autre cas d’utilisation n’est touché.