1 Définir les points de terminaison de l’API
1 Définir les points de terminaison de l’API
Cette implémentation utilise le cadriciel d’application Web Express pour créer une API Node.js.Démarrez votre serveur d’API à l’aide de
Créer un fichier package.json
Créez un dossier pour votre API, accédez-y, puis exécuteznpm init. Cela configure votre fichier package.json.Conservez les paramètres par défaut ou modifiez-les selon vos besoins.Le fichier package.json de notre exemple ressemble à ceci :Installer les dépendances
Ensuite, configurez les dépendances avec les modules suivants :- express : Ce module ajoute le framework Web Express.
- cors : Ce module ajoute la prise en charge de l’activation de CORS, ce qui est nécessaire puisque l’API est appelée à partir d’une application monopage qui s’exécute sur un domaine différent dans un navigateur Web.
- jwks-rsa : Cette bibliothèque récupère les clés de signature RSA à partir d’un point de terminaison JWKS (jeu de clés Web JSON). À l’aide de
expressJwtSecret, nous pouvons générer un fournisseur de secret qui transmet la clé de signature appropriée àexpress-jwten fonction dukiddans l’en-tête JWT. Pour en savoir plus, consultez le dépôt GitHub node-jwks-rsa. - express-jwt : Ce module authentifie les requêtes HTTP à l’aide de jetons JWT dans vos applications Node.js. Il fournit plusieurs fonctions qui facilitent l’utilisation des JWT. Pour en savoir plus, consultez le dépôt GitHub express-jwt.
- body-parser : Il s’agit d’un intergiciel Node.js d’analyse du corps des requêtes. Il extrait l’intégralité du corps d’un flux de requête entrant et l’expose dans
req.bodysous une forme plus facile à exploiter.
Implémentez les points de terminaison
Accédez au répertoire de votre API et créez un fichierserver.js. Votre code doit :- Récupérer les dépendances.
- Implémenter le ou les points de terminaison.
- Démarrer le serveur API.
node server, puis envoyez une requête HTTP POST à localhost:8080/timesheets. Vous devriez voir une réponse JSON contenant le message This is the POST /timesheets endpoint.Nous avons maintenant notre point de terminaison, mais n’importe qui peut l’appeler. Passez à l’étape suivante pour voir comment résoudre ce problème.2 Sécuriser les points de terminaison de l’API
2 Sécuriser les points de terminaison de l’API
Pour valider notre jeton, utilisez la fonction
jwt, fournie par le middleware express-jwt, ainsi que jwks-rsa pour récupérer notre secret. Les bibliothèques font ce qui suit :express-jwtdécode le jeton et transmet la requête, l’en-tête et la charge utile àjwksRsa.expressJwtSecret.jwks-rsatélécharge toutes les clés de signature depuis le point de terminaison JWKS et vérifie si l’une d’elles correspond aukiddans l’en-tête du JWT. Si aucune clé de signature ne correspond aukidreçu, une erreur est générée. S’il y a correspondance, la bonne clé de signature est transmise àexpress-jwt.express-jwtpoursuit ensuite sa logique pour valider la signature du jeton, son expiration, l’audienceet l’issuer.
- Créer la fonction middleware pour valider le jeton d’accès.
- Activer l’utilisation du middleware dans nos routes.
localhost:8080/timesheets, nous devrions obtenir le message d’erreur Missing or invalid token (ce qui est normal puisque nous n’avons pas envoyé de jeton d’accès dans notre requête).Pour tester également le scénario fonctionnel, nous devons :- Obtenir un jeton d’accès. Pour savoir comment faire, consultez : Get an Access Token.
- Appeler l’API en ajoutant un en-tête
Authorizationà notre requête avec la valeurBearer ACCESS_TOKEN(oùACCESS_TOKENest la valeur du jeton récupéré à la première étape).
3 Vérifiez les autorisations de l’application
3 Vérifiez les autorisations de l’application
Dans cette étape, nous ajoutons la possibilité de vérifier si l’application dispose des autorisations (ou scopes) nécessaires et d’utiliser notre point de terminaison pour créer une feuille de temps. Plus précisément, nous voulons nous assurer que le jeton possède le scope approprié, soit Ajoutez maintenant un appel à Si nous appelons notre API avec un jeton qui n’inclut pas ce scope, nous devrions obtenir le message d’erreur Forbidden avec le code d’état HTTP
batch:upload.Pour ce faire, nous utilisons le package Node.js express-jwt-authz ; ajoutez-le donc à votre projet :jwtAuthz(...) à votre middleware pour vous assurer que le JWT contient un scope précis avant d’exécuter un point de terminaison donné.Nous ajoutons une dépendance supplémentaire. La bibliothèque express-jwt-authz, utilisée conjointement avec express-jwt, valide le JWT et s’assure qu’il dispose des autorisations appropriées pour appeler le point de terminaison visé. Pour en savoir plus, consultez le dépôt GitHub d’express-jwt-authz.Voici notre exemple d’implémentation (une partie du code est omise par souci de concision) :403. Vous pouvez le vérifier en supprimant ce scope de votre API.4 Déterminer l’identité de l’utilisateur
4 Déterminer l’identité de l’utilisateur
Le middleware
express-jwt utilisé pour valider le JWT renseigne également req.user avec l’information contenue dans le JWT. Si vous souhaitez utiliser la revendication sub pour identifier l’utilisateur de manière unique, vous pouvez utiliser req.user.sub. Pour l’application de feuilles de temps, nous voulons utiliser l’adresse courriel de l’utilisateur comme identifiant unique.Créer une Action
D’abord, créez une nouvelle Action qui ajoutera l’adresse courriel de l’utilisateur au jeton d’accès.- Accédez à Auth0 Dashboard > Actions > Library, puis sélectionnez Build Custom.
-
Saisissez un Nom descriptif pour votre Action (par exemple,
Add email to access token), sélectionnez le déclencheur Login / Post Login, puis sélectionnez Create. -
Repérez l’éditeur de code Actions, copiez-y le code JavaScript suivant, puis sélectionnez Save Draft pour enregistrer vos modifications :
Le
namespacesert à garantir que la revendication a un nom unique qui n’entre pas en conflit avec les revendications OIDC standard ni avec les services internes. Pour en savoir plus sur les restrictions et les directives relatives aux revendications avec et sans espace de noms, consultez Create Custom Claims. - Dans la barre latérale de l’éditeur de code Actions, sélectionnez Test (icône de lecture), puis sélectionnez Run pour tester votre code.
- Lorsque vous êtes prêt à déployer l’Action, sélectionnez Deploy.
Ajouter votre Action au déclencheur Post-Login
Ensuite, ajoutez l’Action que vous avez créée au déclencheur Post-Login. Pour savoir comment attacher des Actions à des déclencheurs, consultez Write Your First Action.Récupérer l’identifiant unique
Enfin, dans votre API, récupérez la valeur de la revendication à partir dereq.auth. Utilisez cette valeur comme identifiant utilisateur unique à associer aux entrées de feuille de temps.