1. Configuration
Votre application nécessitera certaines informations de configuration. Avant de poursuivre avec le reste de la mise en œuvre, créez une interfaceAuthConfig
qui contiendra diverses valeurs de configuration. Placez cette interface dans un fichier appelé auth0-variables.ts
.
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 le service en place, vous serez capable d’appeler ses méthodes dans toute votre application. Une instance de l’objetWebAuth
de auth0.js peut être créée dans le service.
- login: appelle
authorize
de auth0.js, ce qui initie la connexion universelle. - handleAuthentication: recherche un résultat d’authentification dans le URL hash et le traite avec la méthode
parseHash
de auth0.js - setSession: définit le jeton d’accès de l’utilisateur, le jeton d’ID et le moment auquel 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 dépassée.
Traiter le résultat de l’authentification
Lorsqu’un utilisateur s’authentifie via la connexion universelle et est ensuite redirigé vers votre application, ses informations d’authentification seront contenues dans un URL fragment de hash. La méthodehandleAuthentication
dans le AuthService
est responsable du traitement du hash
Appelez handleAuthentication
dans le composant de base de votre application afin que le fragment de hash d’authentification puisse être traité lorsque l’application se charge pour la première fois après que l’utilisateur y a été redirigé.
Ajouter le composant de rappel
L’utilisation de la connexion universelle signifie que les utilisateurs sont redirigés hors de votre application vers une page hébergée par Auth0. Après s’être authentifiés avec succès, 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 que vous souhaitez; cependant, il est recommandé de créer une route de rappel dédiée pour servir de point central vers lequel l’utilisateur sera redirigé après une authentification réussie. Avoir une seule route de rappel est bénéfique pour deux raisons principales :- Cela évite la nécessité d’ajouter plusieurs (et parfois inconnues) URL de rappel à la liste blanche
- Cela sert de lieu pour afficher un indicateur de chargement pendant que votre application crée la session côté client de l’utilisateur
CallbackComponent
et remplissez-le avec un indicateur de chargement.
assets
. Voir l’exemple téléchargeable pour une démonstration
Après l’authentification, les utilisateurs seront redirigés vers la route /callback
pendant un moment bref, où un indicateur de chargement leur sera affiché. Pendant ce temps, leur session côté client sera créée, après quoi ils seront redirigés vers la route /home
.
3. Obtenez le profil utilisateur
Extraire des informations du jeton
Cette section démontre comment récupérer les informations de l’utilisateur en utilisant le jeton d’accès et le point de terminaison /userinfo. Autre solution : vous pouvez simplement décoder le jeton d’ID en utilisant une bibliothèque (assurez-vous de la valider d’abord). Les données de sortie seront les mêmes. Si vous avez besoin de davantage d’informations 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 appellera la fonction userInfo
pour récupérer les informations de l’utilisateur.
4. Afficher les éléments de l’interface utilisateur de manière conditionnelle en fonction de la permission
Lors du processus d’autorisation, nous avons déjà enregistré les permissions réelles qui ont été accordées à l’utilisateur dans le stockage local. Si lascope
retournée dans authResult
n’est pas vide, cela signifie qu’un ensemble de permissions différentes a été attribué à l’utilisateur par rapport à ce qui a été initialement demandé. Par conséquent, nous devons donc utiliser authResult.scope
pour déterminer les permissions accordées à l’utilisateur.
Si la scope
retournée dans authResult
est vide, cela signifie que l’utilisateur a reçu toutes les permissions qui ont été demandées. Par conséquent, nous pouvons utiliser les permissions demandées pour déterminer les permissions accordées à l’utilisateur.
Voici le code que nous avons écrit en amont pour la fonction setSession
qui effectue cette vérification :
AuthService
que nous pouvons appeler pour déterminer si un utilisateur a reçu une permission particulère :
approve:timesheets
. Notez dans le code ci-dessous que nous avons ajouté un appel à la fonction userHasScopes
pour déterminer si ce lien doit être affiché ou non.
Protection d’une route
Nous devons également protéger une route pour empêcher la navigation vers celle-ci si un utilisateur n’a pas reçu des permissions appropriées. Pour cela, nous pouvons ajouter une nouvelle classe de serviceScopeGuardService
,
ScopeGuardService
dans la définition de la route approval
ci-dessous :
5. Appeler l’API
Le module angular2-jwt peut être utilisé pour lier automatiquement des jetons Web JSON à des requêtes effectuées vers votre API. Il le fait en fournissant une classeAuthHttp
qui recouvre la classe Http
d’Angular.
Installer angular2-jwt
:
angular2-jwt
et ajoutez-la au tableau providers
dans le @NgModule
de votre application. La fonction de fabrique doit avoir une fonction tokenGetter
qui récupère le access_token
du stockage local.
angular2-jwt
,vous pouvez utiliser la classe AuthHttp
pour effectuer des appels sécurisés à votre API à partir de n’importe quel endroit dans l’application. Pour ce faire, injectez AuthHttp
dans n’importe quel composant ou service où il est nécessaire et utilisez-le comme vous utiliseriez la classe Http
régulière d’Angular.
6. Renouveler le jeton d’accès
Le renouvellement du jeton d’accès de l’utilisateur nécessite de mettre à jour la SPA Angular. Ajoutez une méthode àAuthService
qui appelle la méthode checkSession
de auth0.js. Si le renouvellement est réussi, 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 un moment où l’authentification doit être renouvelée en silence. Dans l’exemple ci-dessous, cela est configuré pour se produire 30 secondes avant l’expiration réelle du jeton. Ajoutez également une méthode appelée unscheduleRenewal
qui se désinscrira de l’Observable.
scheduleRenewal
dans votre AppComponent
ce qui se produira lorsque la page est chargée. Cela se produira après chaque flux d’authentification, que ce soit lorsque l’utilisateur se connecte explicitement ou lorsque l’authentification silencieuse a lieu.