1 Définir les points de terminaison API
1 Définir les points de terminaison API
Cette implémentation utilise le cadre d’applications Web Express pour construire une API Node.js.Lancez votre serveur API en utilisant
Créer un fichier package.json
Créez un dossier pour votre API, naviguez-y 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 exemple ressemble à ce qui suit :Installer les dépendances
Définissez ensuite les dépendances avec les modules suivants :- express : ce module ajoute le cadre d’applications Web Express.
- cors : le présent module ajoute la prise en charge de l’activation du CORS, ce qui est nécessaire car l’API est appelée à partir d’une application à page unique 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 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 JWT. Pour en apprendre davantage, référez-vous au node-jwks-rsa GitHub repository. - express-jwt : Le présent module authentifie les requêtes HTTP à l’aide de jetons JWT dans vos applications Node.js. Il fournit plusieurs fonctions qui facilitent le travail avec les JWT. Pour plus d’information, reportez-vous au express-jwt GitHub repository.
- body-parser : il s’agit d’un logiciel médiateur d’analyse de corps Node.js. Il extrait la totalité du corps d’une requête entrante et l’expose sur
req.body
comme quelque chose de plus simple avec laquelle interfacer.
Implémenter les points de terminaison
Ouvrez votre répertoire API et créez un fichierserver.js
. Votre code doit :- Obtenir les dépendances.
- Implémenter le ou les points de terminaison.
- Lancer le serveur API.
node server
et envoyez une requête HTTP POST à localhost:8080/timesheets
. Vous verrez une réponse JSON avec le message This is the POST /timesheets endpoint
.Nous avons désormais notre point de terminaison, mais tout le monde peut l’appeler. Continuez à l’étape suivante pour voir comment nous pouvons 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 le jeton, utilisez la fonction Si nous lançons notre serveur maintenant et effectuons un HTTP POST vers
jwt
fournie par le logiciel médiateur express-jwt, et jwks-rsa
pour récupérer notre secret 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 vous avez une correspondance, transmettez 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 fonction logiciel médiateur pour valider le jeton d’accès.
- Activez l’utilisation du logiciel médiateur dans nos chemins.
localhost:8080/timesheets
nous obtiendrons le message d’erreur Missing or invalid token (Jeton manquant ou non valide)
, 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 à : Get an Access Token (Obtenir un jeton d’accès).
- Invoquez l’API en ajoutant un en-tête
Authorization (Autorisation)
à notre requête avec la valeurBearer ACCESS_TOKEN (Porteur de jeton d’accès)
, oùACCESS_TOKEN (jeton d’accès)
est la valeur du jeton que nous avons récupéré à la première étape.
3 Vérifier les permissions de l’application
3 Vérifier les permissions de l’application
Á cette étape, nous ajoutons la possibilité de vérifier si l’application a des autorisations (ou des permissions) et d’utiliser notre point de terminaison afin de créer une feuille de temps. En particulier, nous voulons nous rassurer que le jeton a la bonne portée, qui est Maintenant, ajoutez un appel à Si nous invoquons notre API avec un jeton qui n’inclut pas cette permission, nous devons obtenir le message d’erreur Interdit avec le code d’état HTTP
batch:upload
.Pour y parvenir, nous utilisons le paquetage 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 spécifique.Nous ajoutons une dépendance supplémentaire. La bibliothèque express-jwt-authz , utilisée conjointement avec express-jwt, valide le jeton JWT et s’assure qu’il possède les autorisations adéquates pour appeler le point de terminaison souhaité. Pour plus d’informations, consultez le référentiel GitHub express-jwt-authz.Voici notre exemple d’implémentation (certains codes sont omis aux fins de concision) :403
. Vous pouvez l’essayer en supprimant cette permission de votre API.4 Déterminer l’identité de l’utilisateur
4 Déterminer l’identité de l’utilisateur
Le logiciel médiateur
express-jwt
utilisé pour valider le jeton JWT configure également req.user
avec les informations contenues dans le jeton JWT. Si vous voulez utiliser la demande sub
pour identifier l’utilisateur de manière unique, vous pouvez utiliser req.user.sub
. Pour l’application des feuilles de temps, nous voulons utiliser l’adresse courriel de l’utilisateur comme identifiant unique.Créer une action
Premièrement, créez une nouvelle Action qui ajoutera l’adresse courriel de l’utilisateur au jeton d’accès.- Allez sur Auth0 Dashboard > Actions > Bibliothèqueet sélectionnezCréer une version personnalisée.
-
Saisissez un Nomdescriptif pour votre action (par exemple,
Add email to access token
), sélectionnez le déclencheur Connexion/Post-connexion, puis sélectionnez Créer. -
Repérez l’éditeur de code des actions, copiez le code JavaScript suivant dans celui-ci, puis sélectionnez Enregistrer le brouillon pour enregistrer vos modifications.
Le
namespace
est utilisé pour s’assurer que la demande a un nom unique qui n’entre pas en conflit avec des demandes OIDC standard ou des services internes. Pour en savoir plus sur les restrictions et instructions avec les demandes à espace de noms et sans espace de noms, consultez Créer des demandes personnalisées. - Dans la barre latérale de l’éditeur de code des actions, sélectionnez Test (icône de lecture), puis sélectionnez Exécuter pour tester votre code.
- Lorsque vous êtes prêt à ce que l’action soit mise en ligne, selectionnez Deploy (Déployer).
Ajoutez votre action au flux de connexion
Ensuite, ajoutez l’action créée au Flux de connexion. Pour savoir comment attacher des actions à des flux, lisez la section Attacher l’action à un flux dans Écrire votre première action.Récupérer l’identifiant unique
Enfin, à partir de votre API, récupérez la valeur de la demande à partir dereq.auth
. Utilisez cette valeur comme identifiant d’utilisateur unique à associer aux entrées de la feuille de temps.