Étape 1. Définir le point de terminaison de l’API
Créer un fichier package.json
npm init. Cela créera votre fichier package.json.
Vous pouvez conserver les paramètres par défaut ou les modifier à votre guise.
Voici à quoi ressemble le fichier package.json de notre exemple :
Installer les dépendances
- express : Ce module ajoute le framework d’applications web Express.
- jwks-rsa : Cette bibliothèque récupère les 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 secret qui fournira la bonne clé de signature àexpress-jwtselon lekiddans le header du . Pour en savoir plus, consultez le repository GitHub node-jwks-rsa. - express-jwt : Ce module vous permet d’authentifier 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 repository GitHub express-jwt.
- body-parser : Il s’agit d’un middleware Node.js d’analyse du body. Il extrait l’intégralité du body d’un stream de request entrant et l’expose dans
req.bodysous une forme plus facile à utiliser. Pour plus d’information et pour découvrir plusieurs solutions de rechange, consultez le repository GitHub de body-parser.
Implémentez le point de terminaison
server.js. Votre code doit :
- Définir les dépendances.
- Activer le middleware d’analyse du corps de la requête.
- Implémenter le point de terminaison.
- Démarrer le serveur API.
node server, puis faites une requête HTTP POST à localhost:8080/timesheets/upload. Vous devriez voir une réponse JSON contenant le message This is the POST /timesheets/upload endpoint.
Nous avons donc maintenant notre point de terminaison, mais n’importe qui peut y faire une requête. Passez au paragraphe suivant pour voir comment régler cela.
É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 depuis Auth0. Ces 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 depuis le 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. En cas de correspondance, nous transmettrons la bonne clé de signature àexpress-jwt.express-jwtpoursuivra ensuite son propre traitement pour valider la signature du jeton, l’expiration,audienceetissuer.
- Créer la fonction middleware pour valider le .
- Activer le middleware dans 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 aussi 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_TOKENcorrespond à la valeur du jeton récupéré à la première étape).
Étape 3. Vérifier les permissions du client
scope) nécessaires 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 a le bon scope, soit batch:upload.
Pour ce faire, nous utiliserons le package Node.js express-jwt-authz, alors ajoutez-le à votre projet :
jwtAuthz(...) dans votre middleware pour vous assurer que le JWT contient une portée précise avant d’accéder à un point de terminaison donné. Voici notre exemple de mise en œuvre (une partie du code est omise par souci de concision) :
403. Vous pouvez le vérifier en retirant cette scope de votre API.
C’est tout ! Vous avez terminé !