Migrer de v9 à v10
Si vous avez besoin de la référence de l’API v9, consultez le package auth0-js sur npm et sélectionnez votre version v9, ou parcourez le code source v9 et le journal des modifications sur GitHub.
La connexion intégrée pour les applications web utilise l’authentification inter-origines, sauf si vous configurez un domaine personnalisé pour votre locataire. L’authentification inter-origines utilise des témoins tiers pour permettre des transactions d’authentification sécurisées entre différentes origines.
Exemple prêt à l’emploi
- Si node n’est pas installé, installez-le maintenant.
- Installez les dépendances en exécutant
npm installà partir de la racine de ce projet. - Enfin, exécutez
npm startà partir de la racine de ce projet, puis accédez à votre application qui s’exécute sur le serveur node, probablement à l’adressehttp://localhost:3000/example.
Configuration et initialisation
Configurez votre application Auth0 pour la connexion intégrée
Options d’installation
auth0-js, incluez-le dans votre bundle avec toutes ses dépendances ou importez-le au moyen de :
Initialisation
Paramètres disponibles
options lors de l’instanciation de webAuth; les autres sont facultatifs.
En raison du décalage d’horloge, il se peut que vous rencontriez parfois l’erreur
The token was issued in the future. Le paramètre leeway permet d’ajouter quelques secondes de tolérance aux heures d’expiration de l’ID Token afin d’éviter cette situation.
Scope
scope par défaut dans Auth0.js v10 est openid profile email.
Exécuter Auth0.js localementSi vous ne précisez pas au minimum le scope ci-dessus lors de l’initialisation d’Auth0.js et que votre site Web est exécuté depuis
http://localhost ou http://127.0.0.1, l’appel à la méthode getSSOData() entraînera l’erreur suivante dans la console du navigateur :Consent required. When using getSSOData, the user has to be authenticated with the following scope: openid profile emailCela ne se produira pas si vous exécutez votre application en production ou si vous précisez le scope openid profile email. Pour en savoir plus, consultez le document Consentement de l’utilisateur et applications tierces.Connexion
authorize() peut être utilisée pour authentifier des utilisateurs au moyen de ou de connexions sociales, comme l’illustrent les exemples ci-dessous. Cette méthode appelle le point de terminaison /authorize de l’Authentication API et peut accepter divers paramètres au moyen de l’objet options.
Pour une connexion hébergée, il faut appeler la méthode
/authorize().
webAuth.authorize({//Toutes les options supplémentaires peuvent être ajoutées ici});
Pour les connexions sociales, le paramètre connection devra être précisé :
webAuth.authorize({connection: 'twitter'});
Pour l’authentification dans une fenêtre contextuelle, vous pouvez utiliser la méthode popup.authorize. L’authentification dans une fenêtre contextuelle ne peut pas être utilisée dans les pages de connexion hébergées. En général, l’authentification dans une fenêtre contextuelle est utilisée par les applications monopage afin de ne pas perdre l’état en cours lors d’une redirection de la page entière.
Autorisation par défaut avec fenêtre contextuelle (Universal Login) :
authorize :
Gérer les résultats de l’authentification par fenêtre contextuelle
redirectUri où la page de destination transmet les résultats de l’autorisation au callback à l’aide de la méthode webAuth.popup.callback. Une implémentation simple pourrait ressembler à ceci :
redirectUri à la liste Allowed Callback URLs de l’application, sur la page de configuration de l’application dans l’Auth0 Dashboard.
webAuth.login()
La connexion intégrée pour les applications Web utilise l’authentification inter-origines, sauf si vous configurez un domaine personnalisé pour votre locataire. L’authentification inter-origines utilise des témoins tiers pour permettre des transactions d’authentification sécurisées entre différentes origines.
login peut être utilisée pour la connexion intégrée au moyen de l’authentification inter-origines pour les connexions de base de données, à l’aide de /co/authenticate.
webAuth.crossOriginVerification()
crossOriginVerification() peut être utilisée pour offrir une authentification inter-origines aux clients qui ont désactivé les témoins tiers dans leur navigateur. Pour en savoir plus sur son utilisation, consultez Authentification inter-origines.
La méthode buildAuthorizeUrl permet de construire l’URL /authorize afin d’initialiser une nouvelle transaction. Utilisez cette méthode si vous souhaitez implémenter une authentification dans le navigateur (passive).
Le paramètre state est une valeur opaque qu’Auth0 vous renverra. Cette méthode aide à prévenir les attaques CSRF et doit être spécifiée si vous redirigez vous-même vers l’URL au lieu d’appeler webAuth.authorize(). Pour en savoir plus, consultez le paramètre state.
Authentification unique avec authentification intégrée
- Les applications qui tentent d’utiliser le SSO sont des applications de première partie. Le partage de sessions intégrées avec des applications tierces n’est pas pris en charge.
- Les applications et votre locataire Auth0 partagent un domaine de premier niveau au moyen d’un domaine personnalisé. Les domaines Auth0 traditionnels utilisent le format
foo.auth0.com; les domaines personnalisés permettent à vos applications et à votre locataire Auth0 de partager le même domaine de premier niveau, ce qui contribue aussi à prévenir les attaques CSRF.
Connexion Passwordless
redirectUri et définissez responseType: 'token'.
Démarrer l’authentification Passwordless
passwordlessStart, qui accepte plusieurs paramètres dans son objet options :
Notez qu’exactement un des paramètres facultatifs
phoneNumber et email doit être envoyé pour démarrer la transaction Passwordless.
Finaliser l’authentification Passwordless
passwordlessLogin, qui accepte plusieurs paramètres pouvant être transmis dans son objet options :
Comme avec
passwordlessStart, un seul des paramètres facultatifs phoneNumber et email doit être transmis afin de vérifier la transaction Passwordless.
Pour utiliser passwordlessLogin, précisez redirectUri et responseType lors de l’initialisation de WebAuth.
Extraire authResult et obtenir les informations sur l’utilisateur
parseHash pour analyser un fragment de hachage d’URL lorsque l’utilisateur est redirigé vers votre application afin d’extraire le résultat d’une réponse d’authentification d’Auth0. Vous pouvez choisir de gérer cela dans une page de rappel qui redirigera ensuite vers votre application principale, ou directement dans la page, selon le contexte.
La méthode parseHash prend un objet options qui contient les paramètres suivants :
Le contenu de l’objet authResult renvoyé par
parseHash dépend des paramètres d’authentification utilisés. Il peut inclure :
client.userInfo peut être appelée en lui transmettant l’accessToken renvoyé. Elle enverra une requête au point de terminaison /userinfo et retournera l’objet user, qui contient les renseignements sur l’utilisateur, présentés de façon semblable à l’exemple ci-dessous.
Utilisation des valeurs nonce
responseType contient id_token), Auth0.js génère une valeur nonce aléatoire lorsque vous appelez webAuth.authorize, la stocke dans le stockage local, puis la récupère dans webAuth.parseHash. Ce comportement par défaut convient dans la plupart des cas, mais certains cas d’utilisation peuvent exiger qu’un développeur contrôle la valeur nonce.
Si vous souhaitez utiliser une valeur nonce générée par le développeur, vous devez la fournir comme option à la fois à webAuth.authorize et à webAuth.parseHash.
webAuth.authorize({<Tooltip tip="Nonce : nombre arbitraire émis une seule fois dans un protocole d’authentification pour détecter et prévenir les attaques par rejeu." cta="Voir le glossaire" href="/docs/glossary?term=nonce">nonce</Tooltip>: '1234', responseType: 'token id_token'}); webAuth.parseHash({nonce: '1234'}, callback);
Si vous appelez webAuth.checkSession au lieu de webAuth.authorize, vous devez seulement spécifier votre valeur nonce personnalisée comme option de checkSession :
webAuth.checkSession vérifiera automatiquement que la revendication nonce du renvoyé correspond à la valeur fournie dans l’option.
Codes d’erreur et descriptions
/co/authenticate, qui peut produire les erreurs suivantes :
Les descriptions d’erreur sont destinées à être compréhensibles pour les humains. La description ne doit pas être interprétée par du code et peut être modifiée à tout moment.
De plus, vous pouvez aussi recevoir une erreur 403 générique sans propriété
error ni error_description. Le corps de la réponse contiendrait simplement quelque chose de semblable à ce qui suit :
Origin https://test.app is not allowed.
Déconnexion
logout(). Cette méthode accepte un objet d’options pouvant inclure les paramètres suivants.
Si le paramètre clientID est inclus, l’URL returnTo fournie doit figurer dans les Allowed Logout URLs de l’application dans l’Auth0 Dashboard. Toutefois, si le paramètre clientID n’est pas inclus, l’URL returnTo doit figurer dans les Allowed Logout URLs au niveau du compte dans l’Auth0 Dashboard.
Inscription
signup. Cette méthode accepte un objet d’options qui peut inclure les paramètres suivants.
Les inscriptions doivent être effectuées pour des connexions de base de données. Voici un exemple de la méthode
signup et un exemple de code pour un formulaire.
Utiliser checkSession pour obtenir de nouveaux jetons
checkSession vous permet d’obtenir un nouveau jeton d’Auth0 pour un utilisateur déjà authentifié auprès d’Auth0 sur votre domaine. La méthode accepte tous les paramètres OAuth2 valides qui seraient normalement envoyés à authorize. Si vous les omettez, elle utilisera ceux fournis lors de l’initialisation d’Auth0.
L’appel à checkSession peut servir à obtenir un nouveau jeton pour l’API spécifiée comme lors de l’initialisation de webAuth :
authResult.
Ou bien, le jeton peut être obtenu pour une API différente de celle utilisée lors de l’initialisation de webAuth en précisant une audience et un scope :
checkSession() déclenche toutes les Rules que vous avez éventuellement configurées. Vous devriez donc vérifier vos Rules dans l’Auth0 Dashboard avant de l’utiliser.
La redirection réelle vers /authorize se fait dans une iframe; votre application ne sera donc pas rechargée et vous ne serez pas redirigé hors de celle-ci.
Cependant, le navigateur doit avoir les témoins tiers activés. Sinon, checkSession() ne pourra pas accéder à la session de l’utilisateur actuel (ce qui rend impossible l’obtention d’un nouveau jeton sans rien afficher à l’utilisateur). Il en ira de même si les utilisateurs ont la fonctionnalité ITP de Safari activée.
N’oubliez pas d’ajouter l’URL d’où provient la demande d’autorisation à la liste Origines Web autorisées de votre application Auth0 dans l’Auth0 Dashboard, sous les Settings de votre application.
Vérification périodique avec checkSession()
checkSession() afin de vérifier si une session existe. Si aucune session n’existe, vous pouvez alors déconnecter l’utilisateur de l’application. La même méthode de vérification périodique peut être utilisée pour mettre en œuvre l’authentification silencieuse dans un scénario d’authentification unique (SSO).
L’intervalle entre les appels à checkSession() doit être d’au moins 15 minutes afin d’éviter tout problème futur lié à la limitation du nombre de requêtes pour cet appel.
Demandes de réinitialisation du mot de passe
changePassword et transmettez-lui un objet options contenant un paramètre connection et un paramètre email.
Gestion des utilisateurs
https://{yourDomain}/api/v2/ lors de l’initialisation d’Auth0.js; vous obtiendrez alors le jeton d’accès dans le cadre du flux d’authentification.
Si vous utilisez des domaines personnalisés, vous devrez créer une nouvelle instance de webAuth en utilisant votre domaine Auth0 plutôt que votre domaine personnalisé pour les appels à la Management API, car elle fonctionne uniquement avec les domaines Auth0.
Vous pouvez également le faire à l’aide de checkSession() :
Vous devez préciser les scopes dont vous avez besoin. Vous pouvez demander les scopes suivants :
read:current_userupdate:current_user_identitiescreate:current_user_metadataupdate:current_user_metadatadelete:current_user_metadatacreate:current_user_device_credentialsdelete:current_user_device_credentials
auth0.Management en lui transmettant le Domaine Auth0 du compte ainsi que le jeton d’accès.
Obtenir le profil de l’utilisateur
getUser() en lui passant userId et un callback en paramètres. La méthode renvoie le profil de l’utilisateur. Notez que le userID requis ici est le même que celui récupéré par la méthode client.userInfo.
auth0Manage.getUser(userId, cb);
Mise à jour du profil utilisateur
userMetadata, puis appeler la méthode patchUserMetadata en lui passant l’id de l’utilisateur et l’objet userMetadata que vous avez créé. Les valeurs de cet objet remplaceront les valeurs existantes ayant la même clé ou ajouteront de nouvelles valeurs pour les clés qui n’existent pas encore dans les métadonnées utilisateur. Pour en savoir plus, consultez Metadata.
auth0Manage.patchUserMetadata(userId, userMetadata, cb);
Lier des utilisateurs
linkUser accepte deux paramètres : le userId principal et l’ID Token de l’utilisateur secondaire (le jeton obtenu après la connexion avec cette identité). L’ID utilisateur en question est l’identifiant unique du compte utilisateur principal. L’ID doit être transmis avec le préfixe du fournisseur, par exemple auth0|1234567890 ou facebook|1234567890, lorsque vous utilisez cette méthode. Consultez User Account Linking pour en savoir plus.
auth0Manage.linkUser(userId, secondaryUserToken, cb);
Après la liaison des comptes, le second compte n’existera plus comme entrée distincte dans la base de données des utilisateurs et ne sera accessible qu’à titre de partie du compte principal.
Lorsque des comptes sont liés, les métadonnées du compte secondaire ne sont pas fusionnées avec celles du compte principal et, s’ils sont ensuite dissociés, le compte secondaire ne conservera pas non plus les métadonnées du compte principal lorsqu’il redeviendra distinct.