Étape 1. Configuration
Votre application aura besoin de certaines informations de configuration. Avant de poursuivre la mise en œuvre, créez une interfaceAuthConfig qui contiendra différentes valeurs de configuration. Placez cette interface dans un fichier appelé auth0-variables.ts.
Étape 2. Autoriser l’utilisateur
Créer un service d’autorisation
La meilleure façon de gérer et de coordonner les tâches nécessaires à l’authentification de l’utilisateur est de créer un service réutilisable. Une fois ce service en place, vous pourrez appeler ses méthodes partout dans votre application. Vous pouvez créer dans ce service une instance de l’objetWebAuth de auth0.js.
- login : appelle
authorizede auth0.js, ce qui lance - handleAuthentication : recherche un résultat d’authentification dans le hachage de l’URL et le traite à l’aide de la méthode
parseHashd’auth0.js - setSession : définit le de l’utilisateur, son , ainsi que l’heure à laquelle le jeton d’accès expirera
- logout : supprime les jetons de l’utilisateur du stockage du navigateur isAuthenticated: vérifie si l’heure d’expiration du jeton d’accès est passée
Traiter le résultat de l’authentification
Lorsqu’un utilisateur s’authentifie au moyen d’Universal Login, puis qu’il est redirigé vers votre application, ses informations d’authentification se trouvent dans un fragment de hachage de l’URL. La méthodehandleAuthentication de AuthService est chargée de traiter le hachage.
Appelez handleAuthentication dans le composant racine de votre application afin que le fragment de hachage d’authentification puisse être traité au premier chargement de l’application après la redirection de l’utilisateur.
Ajouter le composant Callback
L’utilisation de Universal Login signifie que les utilisateurs sont redirigés hors de votre application vers une page hébergée par Auth0. Une fois leur authentification réussie, ils sont renvoyés vers votre application, où une session côté client est créée pour eux. Vous pouvez choisir de faire revenir les utilisateurs vers n’importe quelle URL de votre application; toutefois, il est recommandé de créer une route de rappel dédiée qui servira de point central vers lequel l’utilisateur sera redirigé après une authentification réussie. Le fait d’avoir une seule route de rappel présente deux grands avantages :- Cela évite d’avoir à mettre sur liste d’autorisation plusieurs URL de rappel (parfois même inconnues)
- Cela permet d’afficher un indicateur de chargement pendant que votre application crée la session côté client de l’utilisateur
CallbackComponent et ajoutez-y un indicateur de chargement.
assets. Consultez l’exemple à télécharger pour en voir une démonstration.
Après l’authentification, les utilisateurs seront brièvement redirigés vers la route /callback, où un indicateur de chargement s’affichera. Pendant ce temps, leur session côté client sera établie, puis ils seront redirigés vers la route /home.
Étape 3. Obtenir le profil de l’utilisateur
Extraire des renseignements du jeton
Cette section explique comment récupérer les renseignements de l’utilisateur à l’aide du jeton d’accès et du point de terminaison /userinfo. Vous pouvez aussi simplement décoder le ID Token à l’aide d’une bibliothèque (assurez-vous d’abord de le valider). Le résultat sera le même. Si vous avez besoin de renseignements supplémentaires sur l’utilisateur, envisagez d’utiliser notre Management API.
AuthService existante. Ajoutez une fonction getProfile qui extraira le jeton d’accès de l’utilisateur du stockage local, puis le transmettra à la fonction userInfo pour récupérer les renseignements de l’utilisateur.
Étape 4. Afficher les éléments de l’UI de façon conditionnelle selon la portée
Pendant le processus d’autorisation, nous avons déjà enregistré dans le stockage local les portées réellement accordées à l’utilisateur. Si lescope renvoyé dans authResult n’est pas vide, cela signifie que l’utilisateur a reçu un ensemble de portées différent de celui demandé au départ; nous devons donc utiliser authResult.scope pour déterminer les portées qui lui ont été accordées.
Si le scope renvoyé dans authResult est vide, cela signifie que l’utilisateur a obtenu toutes les portées demandées; nous pouvons donc utiliser les portées demandées pour déterminer celles qui lui ont été accordées.
Voici le code que nous avons écrit plus tôt pour la fonction setSession qui effectue cette vérification :
AuthService une fonction permettant de déterminer si un utilisateur a reçu un scope précis :
approve:timesheets. Notez que, dans le code ci-dessous, nous avons ajouté un appel à la fonction userHasScopes pour déterminer si ce lien doit être affiché ou non.
Protéger une route
Nous devrions aussi protéger une route afin d’empêcher un utilisateur d’y accéder s’il ne s’est pas vu accorder lesscopes appropriés. Pour ce faire, nous pouvons ajouter une nouvelle classe de service ScopeGuardService :
ScopeGuardService dans la définition de la route approval ci-dessous :
Étape 5. Appeler l’API
Le module angular2-jwt peut être utilisé pour joindre automatiquement des aux requêtes adressées à votre API. Pour ce faire, il fournit une classeAuthHttp qui encapsule la classe Http d’Angular.
Installez angular2-jwt :
angular2-jwt, puis ajoutez-la au tableau providers de l’@NgModule de votre application. La fonction de fabrique doit inclure une fonction tokenGetter qui récupère l’access_token à partir du stockage local.
angular2-jwt configuré, vous pouvez utiliser la classe AuthHttp pour effectuer des requêtes sécurisées vers votre API depuis n’importe où dans l’application. Pour ce faire, injectez AuthHttp dans tout composant ou service qui en a besoin et utilisez-le comme vous le feriez avec la classe Http standard d’Angular.
Étape 6. Renouveler le jeton d’accès
Le renouvellement du jeton d’accès de l’utilisateur nécessite une mise à jour de la SPA Angular. Ajoutez une méthode àAuthService qui appelle la méthode checkSession d’auth0.js. Si le renouvellement réussit, utilisez la méthode setSession existante pour enregistrer les nouveaux jetons dans le stockage local.
AuthService, ajoutez une méthode appelée scheduleRenewal pour définir le moment où l’authentification doit être renouvelée en silence. Dans l’exemple ci-dessous, elle est configurée pour s’exécuter 30 secondes avant l’expiration réelle du jeton. Ajoutez également une méthode appelée unscheduleRenewal pour annuler l’abonnement à l’Observable.
scheduleRenewal dans votre AppComponent, afin qu’il s’exécute au chargement de la page. Cela se produira après chaque flux d’authentification, soit lorsque l’utilisateur se connecte explicitement, soit lors d’une authentification silencieuse.