Étape 1. Définir le point de terminaison de l’API
Créer un fichier package.json
npm init. Cette commande créera votre fichier package.json.
Vous pouvez conserver les paramètres par défaut ou les modifier selon vos besoins.
Le fichier package.json de notre exemple ressemble à ceci :
Installer les dépendances
- express : Ce module ajoute le framework d’applications Web Express.
- jwks-rsa : Cette bibliothèque récupère des clés de signature RSA à partir d’un point de terminaison JWKS (JSON Web Key Set). En utilisant
expressJwtSecret, nous pouvons générer un fournisseur de secrets qui fournira la clé de signature appropriée àexpress-jwten fonction dukiddans l’en-tête du . Pour en savoir plus, consultez le dépôt GitHub node-jwks-rsa. - express-jwt : Ce module vous permet d’authentifier des 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 à utiliser. Pour en savoir plus et découvrir plusieurs solutions de rechange, consultez le dépôt GitHub de body-parser.
Implémentez le point de terminaison
server.js. Votre code doit :
- Configurer les dépendances.
- Activer le middleware d’analyse du corps de la requête.
- Implémenter le point de terminaison.
- Lancer le serveur de l’API.
node server, puis effectuez une requête HTTP POST vers localhost:8080/timesheets/upload. Vous devriez voir une réponse JSON contenant le message This is the POST /timesheets/upload endpoint.
Nous avons maintenant notre point de terminaison, mais n’importe qui peut y accéder. Passez au paragraphe suivant pour voir comment régler ce problème.
Étape 2. Sécuriser le point de terminaison de l’API
jwt, fournie par le middleware express-jwt, ainsi que le package jwks-rsa pour récupérer la clé publique d’Auth0. Les bibliothèques font ce qui suit :
express-jwtdécodera le jeton et transmettra la requête, l’en-tête et la charge utile àjwksRsa.expressJwtSecret.jwks-rsatéléchargera ensuite toutes les clés de signature à partir du point de terminaison JWKS et vérifiera si l’une d’elles correspond aukiddans l’en-tête du JWT. Si aucune des clés de signature ne correspond aukidreçu, une erreur sera générée. Si une correspondance est trouvée, nous transmettrons la bonne clé de signature àexpress-jwt.express-jwtpoursuivra ensuite sa logique de validation de la signature du jeton, de l’expiration, deaudienceet deissuer.
- Créer la fonction middleware pour valider le .
- Activer l’utilisation du middleware sur nos routes.
localhost:8080/timesheets/upload, nous devrions obtenir le message d’erreur Missing or invalid token (ce qui est tout à fait normal, puisque nous n’avons pas envoyé de jeton d’accès dans notre requête).
Pour tester également le scénario où tout fonctionne, nous devons :
- Obtenir un jeton d’accès. Pour savoir comment faire, consultez : Get an Access Token
- Appeler l’API en ajoutant à notre requête un en-tête
Authorizationayant pour valeurBearer ACCESS_TOKEN(oùACCESS_TOKENcorrespond à la valeur du jeton récupéré à la première étape).
Étape 3. Vérifier les autorisations de l’application
scope) requises pour utiliser notre point de terminaison afin de téléverser une feuille de temps. Plus précisément, nous voulons nous assurer que le jeton possède le bon scope, soit batch:upload.
Pour ce faire, nous utiliserons le package Node.js express-jwt-authz; ajoutez-le donc à votre projet :
jwtAuthz(...) à votre middleware pour vérifier que le JWT contient un scope particulier avant d’exécuter un point de terminaison donné. 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.
Et voilà ! C’est terminé !