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 et le journal des modifications de la v9 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 tenant. L’authentification inter-origines utilise des cookies 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é, faites-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 ouvrez dans votre navigateur l’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, regroupez-le avec toutes ses dépendances, ou importez-le ainsi :
Initialisation
Paramètres disponibles
options lors de l’instanciation de webAuth, ainsi que d’autres paramètres facultatifs.
En raison de décalages d’horloge, vous pourriez parfois rencontrer l’erreur
The token was issued in the future. Le paramètre leeway peut être utilisé pour accorder quelques secondes de tolérance aux délais d’expiration du ID Token, afin d’éviter cette situation.
Scope
scope par défaut dans Auth0.js v10 est openid profile email.
Exécuter Auth0.js en localSi vous ne précisez pas au minimum le
scope ci-dessus lors de l’initialisation d’Auth0.js et que votre site Web s’exécute à partir de http://localhost ou de http://127.0.0.1, l’appel de 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 connecter des utilisateurs au moyen de ou de connexions sociales, comme le montrent les exemples ci-dessous. Cette méthode appelle le point de terminaison /authorize de l’Authentication API et peut accepter divers paramètres par l’intermédiaire de l’objet options.
Pour la connexion hébergée, il faut appeler la méthode
/authorize().
webAuth.authorize({//Toute option supplémentaire peut être ajoutée 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 d’éviter de perdre l’état courant lors d’une redirection qui recharge entièrement la page.
Autorisation par défaut avec fenêtre contextuelle (Universal Login) :
authorize :
Gérer les résultats de l’authentification dans une 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 mise en œuvre simple pourrait ressembler à ceci :
redirectUri à la liste Allowed Callback URLs de l’application, sur la page de configuration de l’application dans le Dashboard.
webAuth.login()
La connexion intégrée pour les applications web utilise l’authentification inter-origines, à moins que vous ne configuriez un domaine personnalisé pour votre tenant. L’authentification inter-origines utilise des cookies 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 par authentification inter-origines avec des connexions de base de données, au moyen de /co/authenticate.
webAuth.crossOriginVerification()
crossOriginVerification() peut servir à offrir une authentification inter-origines aux clients qui ont désactivé les cookies tiers dans leur navigateur. Pour en savoir plus sur son utilisation, consultez Authentification inter-origines.
La méthode buildAuthorizeUrl peut être utilisée pour générer l’URL /authorize afin d’initialiser une nouvelle transaction. Utilisez cette méthode si vous souhaitez mettre en place une authentification passive dans le navigateur.
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 effectuez vous-même la redirection vers l’URL au lieu d’appeler webAuth.authorize(). Pour en savoir plus, consultez State Parameter.
Authentification unique avec authentification intégrée
- Les applications qui tentent d’utiliser le SSO sont des applications propriétaires. Le partage de sessions de connexion intégrée avec des applications tierces n’est pas pris en charge.
- Les applications et votre tenant Auth0 partagent un domaine de premier niveau grâce à un domaine personnalisé. Les domaines Auth0 traditionnels utilisent le format
foo.auth0.com; les domaines personnalisés permettent à vos applications et à votre tenant Auth0 de partager le même domaine de premier niveau, ce qui aide aussi à prévenir les attaques CSRF.
Connexion sans mot de passe
redirectUri et définissez responseType: 'token'.
Démarrer l’authentification sans mot de passe
passwordlessStart, qui comporte plusieurs paramètres pouvant être transmis dans son objet options :
Notez qu’un seul des paramètres facultatifs
phoneNumber et email doit être envoyé pour démarrer la transaction sans mot de passe.
Finaliser l’authentification sans mot de passe
passwordlessLogin, qui comporte 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 sans mot de passe.
Pour utiliser passwordlessLogin, précisez redirectUri et responseType lors de l’initialisation de WebAuth.
Extraire le authResult et obtenir des renseignements sur l’utilisateur
parseHash pour analyser le fragment de hachage d’une URL lorsque l’utilisateur est redirigé vers votre application afin d’extraire le résultat d’une Authentication response Auth0. Vous pouvez choisir de gérer cela dans une page de callback, qui redirigera ensuite vers votre application principale, ou directement dans la page, selon la situation.
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’authentication utilisés. Il peut inclure :
client.userInfo peut être appelée en lui passant l’accessToken renvoyé. Elle enverra une requête au point de terminaison /userinfo et renverra l’objet user, qui contient les renseignements de l’utilisateur, dans un format semblable à l’exemple ci-dessous.
Utilisation des nonces
responseType contient id_token), Auth0.js génère un nonce aléatoire lorsque vous appelez webAuth.authorize, le stocke dans le stockage local, puis le récupère dans webAuth.parseHash. Ce comportement par défaut devrait convenir dans la plupart des cas, mais certains cas d’utilisation peuvent exiger qu’un développeur gère le nonce.
Si vous souhaitez utiliser un nonce généré par le développeur, vous devez le fournir comme option à la fois à webAuth.authorize et à webAuth.parseHash.
webAuth.checkSession au lieu de webAuth.authorize, vous n’avez qu’à indiquer votre nonce personnalisé comme option à checkSession :
webAuth.checkSession vérifiera automatiquement que le claim nonce du renvoyé est le même que celui de l’option.
Codes d’erreur et descriptions
/co/authenticate, qui peut produire les erreurs suivantes :
Les descriptions d’erreur sont destinées à être lues par des humains. La description ne doit pas être analysée par du code et peut être modifiée à tout moment.
De plus, il est aussi possible d’obtenir 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.
Logout
logout(). Cette méthode accepte un objet options, qui peut 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 le Dashboard Auth0. 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 le Dashboard Auth0.
Inscription
signup. Cette méthode accepte un objet options, qui peut inclure les paramètres suivants.
Les inscriptions doivent se faire au moyen de connexions de base de données. Voici un exemple de la méthode
signup et un exemple de code pour un formulaire.
Utilisation de 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 pour votre domaine. Cette 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 définie comme lors de l’initialisation de webAuth :
authResult.
Sinon, il est possible d’obtenir le jeton pour une API différente de celle utilisée lors de l’initialisation de webAuth en précisant audience et scope :
checkSession() déclenche toutes les rules que vous avez peut-être configurées; vous devriez donc vérifier vos rules dans le Dashboard avant de l’utiliser.
La redirection vers /authorize s’effectue en fait à l’intérieur d’un iframe; votre application ne sera donc pas rechargée et ne sera pas redirigée ailleurs.
Cependant, le navigateur doit avoir les cookies tiers activés. Sinon, checkSession() ne peut pas accéder à la session de l’utilisateur actuel (ce qui rend impossible l’obtention d’un nouveau token sans rien afficher à l’utilisateur). La même chose se produira si les utilisateurs ont ITP de Safari activé.
N’oubliez pas d’ajouter l’URL d’origine de la requête d’autorisation à la liste Allowed Web Origins de votre application Auth0 dans le 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 vérifications effectuées avec checkSession() devrait être d’au moins 15 minutes entre les appels, afin d’éviter tout problème futur lié à la limitation du débit de cet appel.
Requêtes de réinitialisation du mot de passe
changePassword et lui passerez un objet options comprenant un paramètre connection et un paramètre email.
Gestion des utilisateurs
https://{yourDomain}/api/v2/ lors de l’initialisation d’Auth0.js; dans ce cas, vous obtiendrez le jeton d’accès dans le cadre du flux d’authentification.
Si vous utilisez des domaines personnalisés, vous devrez instancier une nouvelle instance de webAuth en utilisant votre domaine Auth0 plutôt que votre domaine personnalisé afin de l’utiliser pour les appels à la Management API, car celle-ci fonctionne uniquement avec des domaines Auth0.
Vous pouvez aussi le faire avec checkSession() :
Vous devez préciser les scopes exacts 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 passant le domaine Auth0 du compte ainsi que le jeton d’accès.
Obtenir le profil de l’utilisateur
getUser() avec userId et un callback comme 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é à partir de la méthode client.userInfo.
auth0Manage.getUser(userId, cb);
Mettre à jour le profil d’utilisateur
userMetadata, puis appeler la méthode patchUserMetadata en lui transmettant l’ID utilisateur et l’objet userMetadata que vous avez créé. Les valeurs de cet objet remplaceront les valeurs existantes associées à la même clé, ou en ajouteront de nouvelles si elles n’existent pas encore dans les métadonnées de l’utilisateur. Pour en savoir plus, consultez Métadonnées.
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 token obtenu après la connexion avec cette identité). L’ID utilisateur en question est l’identifiant unique du compte d’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 Liaison de comptes d’utilisateur pour plus de détails.
auth0Manage.linkUser(userId, secondaryUserToken, cb);
Après la liaison des comptes, le deuxième compte n’existera plus comme entrée distincte dans la base de données des utilisateurs et ne sera accessible qu’en tant que 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. 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.