1. Définir le point de terminaison API
Cette implémentation utilise le cadre d’applications Web Express pour construire une API Node.js.Créer un fichier package.json
Créez un dossier pour votre API et exécuteznpm init
. Ce processus configure votre fichier package.json
.
Laissez les paramètres par défaut ou modifiez-les selon votre convenance.
Le package.json
de notre échantillon ressemble à ce qui suit :
Installer les dépendances
Ensuite, nous devons définir nos dépendances. Nous utiliserons les modules suivants :- express : Ce module ajoute le cadre d’applications Web Express.
- jwks-rsa : cette bibliothèque récupère les clés de connexion RSA à partir d’un point de terminaison JWKS (JSON Web Key Set). À l’aide de
expressJwtSecret
nous pouvons générer un fournisseur de secret qui fournit la bonne clé de connexion àexpress-jwt
en fonction dukid
dans l’en-tête . Pour en apprendre davantage, consultez node-jwks-rsa GitHub repository. - express-jwt : Ce module vous laisse authentifier les requêtes HTTP à l’aide de jetons JWT dans vos applications Node.js. Express-jwtusieurs fonctions qui facilitent le travail avec les JWT. Pour plus d’information consultez express-jwt GitHub repository.
- body-parser : il s’agit d’un logiciel médiateur d’analyse de corps Node.js. Il extrait la partie entière du corps d’une requête entrante et l’expose sur
req.body
comme quelque chose de plus facile à interfacer. Pour plus d’informations et plusieurs alternatives, consultez le dépôt GitHub body-parser.
Implémenter le point de terminaison
Ouvrez votre Directory API et créez un fichierserver.js
. Votre code doit :
- Régler les dépendances.
- Activer le logiciel médiateur d’analyse du corps de la demande.
- Implémenter le point de terminaison.
- Lancer le serveur API.
node server
et envoyez une requête HTTP POST à localhost:8080/timesheets/upload
. Vous verrez une réponse JSON avec le message Ceci est le point de terminaison POST /feuilles de temps/téléversement
.
Nous avons désormais notre point de terminaison, mais tout le monde peut l’appeler. Rendez-vous au paragraphe suivant pour voir comment nous pouvons résoudre ce problème.
2. Sécuriser le point de terminaison API
Afin de valider notre jeton, nous allons utiliser la fonctionjwt
fournie par le logiciel médiateur express-jwt, et le paquet jwks-rsa
pour récupérer la clé publique d’Auth0. Les bibliothèques remplissent les rôles suivants :
express-jwt
décode le jeton et achemine la demande l’en-tête et les données utiles versjwksRsa.expressJwtSecret
.jwks-rsa
télécharge toutes les clés de connexion à partir du point de terminaison JWKS et vérifie si l’une des clés de connexion correspond à la valeurkid
dans l’en-tête du jeton JWT. Si aucune des clés de connexion ne correspond à la valeurkid
reçue, une erreur sera générée. Si nous avons une correspondance, nous transmettrons la bonne clé de connexion àexpress-jwt
.express-jwt
poursuit sa propre logique pour valider la signature du jeton, l’expiration, l’audience
et l’issuer
.
- Créer la fonctionnalité logiciel médiateur pour valider le jeton d’accès.
- Activez l’utilisation de logiciel médiateur dans nos chemins.
localhost:8080/timesheets/upload
nous obtiendrons le message d’erreur Missing or invalid token
, ce qui est correct, car nous n’avons pas envoyé de jeton d’accès dans notre requête.
Pour tester également le scénario de fonctionnement, nous devons :
- Obtenir un jeton d’accès. Pour plus d’informations sur la procédure à suivre pour y parvenir, reportez-vous à : Obtenir un jeton d’accès
- Invoquez l’API en ajoutant un en-tête d’
Authorization
à notre requête avec la valeurBearer ACCESS_TOKEN
, oùACCESS_TOKEN
est la valeur du jeton que nous avons récupéré à la première étape.
3. Vérifier les autorisations du client
Á cette étape nous ajoutons la possibilité de vérifier si le client a des autorisations (ouscope
) pour utiliser notre point de terminaison afin de téléverser une feuille de temps. En particulier, nous voulons nous rassurer que le jeton a la bonne permission, qui est batch:upload
.
Pour y parvenir, nous utilisons le paquet express-jwt-authz
Node.js, donc ajoutez-le à votre projet :
jwtAuthz(...)
à votre logiciel médiateur pour vous assurer que le jeton JWT contient une permission particulière afin d’exécuter un point de terminaison particulier. Voici notre exemple d’implémentation (certains codes sont omis en raison aux fins de concision) :
403
. Vous pouvez l’essayer en supprimant cette permission de votre API.
Et voilà! Vous avez terminé!