Auth0 get jwt token
Un
jeton est une donnée qui n’a pas de sens ou d’utilité en soi, mais qui, combinée au bon système de tokenisation, devient un acteur essentiel dans la sécurisation de votre application. L’authentification basée sur les jetons fonctionne en veillant à ce que chaque demande adressée à un serveur soit accompagnée d’un jeton signé dont l’authenticité est vérifiée par le serveur et ne répond qu’ensuite à la demande.
JSON Web Token (JWT) est une norme ouverte (RFC 7519) qui définit une méthode compacte et autonome pour la transmission sécurisée d’informations entre des parties encodées en tant qu’objet JSON. JWT a gagné en popularité en raison de sa taille compacte qui permet de transmettre facilement les jetons via des chaînes de requête, des attributs d’en-tête et dans le corps d’une requête POST.
Pourquoi utiliser des tokens ?
- Les jetons sont sans état. Le jeton est autonome et contient toutes les informations dont il a besoin pour l’authentification. C’est excellent pour l’évolutivité car cela libère votre serveur de la nécessité de stocker l’état de la session.
- Les jetons peuvent être générés de n’importe où. La génération de jetons est découplée de la vérification des jetons, ce qui vous permet de gérer la signature des jetons sur un serveur distinct ou même par l’intermédiaire d’une autre société telle que Auth0.
- Contrôle d’accès précis. Dans la charge utile du jeton, vous pouvez facilement spécifier les rôles et les autorisations des utilisateurs, ainsi que les ressources auxquelles l’utilisateur peut accéder.
Ce ne sont là que quelques-uns des avantages qu’offrent les jetons Web JSON. Pour en savoir plus, consultez cet
Anatomie d’un jeton
Un jeton Web JSON se compose de trois parties : En-tête , Charge utile et Signature . L’en-tête et la charge utile sont encodés en Base64, puis concaténés par un point, enfin le résultat est signé algorithmiquement produisant un jeton sous la forme header.claims.signature. L’en-tête se compose de métadonnées, y compris le type de jeton et l’algorithme de hachage utilisé pour signer le jeton. La charge utile contient les données de revendication que le jeton est en train d’encoder. Le résultat final est le suivant :
les jetons sont signés pour protéger contre la manipulation, ils ne sont pas cryptés. Cela signifie qu’un jeton peut être facilement décodé et que son contenu peut être révélé. Si nous naviguons sur le jwt.io et collons le jeton ci-dessus, nous pourrons lire l’en-tête et la charge utile - mais sans le secret correct, le jeton est inutile et nous voyons le message « Signature invalide ». Si nous ajoutons le bon secret, dans cet exemple, la chaîne , nous verrons maintenant un message indiquant « Signature vérifiée ».
Dans un scénario réel, un client ferait une requête au serveur et transmettrait le jeton avec la requête. Le serveur tente de vérifier le jeton et, en cas de succès, continue à traiter la demande. Si le serveur ne pouvait pas vérifier le jeton, il envoyait un message indiquant que la demande n’a pas pu être traitée, car l’autorisation n’a pas pu être vérifiée.
Bonnes pratiques pour les jetons Web JSON
Avant de passer à l’implémentation de JWT, voyons quelques bonnes pratiques pour garantir que l’authentification basée sur les jetons est correctement implémentée dans votre application.
- Gardez-le secret. Gardez-le en sécurité. La clé de signature doit être traitée comme n’importe quelle autre identification et révélée uniquement aux services qui en ont absolument besoin.
- N’ajoutez pas de données sensibles à la charge utile. Les jetons sont signés pour protéger contre la manipulation et sont facilement décodés. Ajoutez le nombre minimum de revendications à la charge utile pour des performances et une sécurité optimales.
- Donnez une date d’expiration aux jetons. Techniquement, une fois qu’un jeton est signé, il est valable pour toujours, à moins que la clé de signature ne soit modifiée ou que l’expiration ne soit explicitement définie. Cela pourrait poser des problèmes potentiels, alors ayez une stratégie pour expirer et/ou révoquer les jetons.
- Adoptez HTTPS. N’envoyez pas de jetons via des connexions non HTTPS, car ces demandes peuvent être interceptées et les jetons compromis.
- Tenez compte de tous vos cas d’utilisation d’autorisation. L’ajout d’un système secondaire de vérification des jetons qui garantit que les jetons ont été générés à partir de votre serveur, par exemple, n’est peut-être pas une pratique courante, mais peut être nécessaire pour répondre à vos besoins.
Pour plus d’informations et les meilleures pratiques, consultez l’article de blog 10 choses que vous devez savoir sur les jetons.
L’authentification basée sur les jetons simplifiée L’authentification
basée sur les jetons et JWT sont largement pris en charge. Implémentons une API et voyons à quelle vitesse nous pouvons la sécuriser avec JWT.
Nous avons choisi de construire notre API avec NodeJS car cela nécessite le moins de configuration possible. Jetons un coup d’œil au code de notre implémentation de JWT.
Pour tester notre API actuelle, exécutons l’application et accédons à . Nous ne verrons que le message « Bienvenue dans notre API ». Ensuite, naviguez jusqu’à l’itinéraire et nous verrons un message d’erreur JWT qui dira que nous n’avons pas reçu de jeton. Naviguez jusqu’à l’itinéraire et vous verrez un nouveau jeton généré. Copiez ce jeton, puis accédez à et vous verrez la réponse prévue, à savoir les finances de l’entreprise Comptes.
En quelques lignes de code, nous avons pu sécuriser notre point de terminaison d’API. Nous n’avons pas abordé la gestion de l’authentification appropriée de l’utilisateur avant de générer un jeton. Nous le ferons ensuite avec Auth0.
Authentification JWT avec Auth0
Nous devrons apporter quelques légères modifications à notre code pour présenter le flux d’authentification avec Auth0. Examinons les modifications ci-dessous :
Pour vérifier que cela fonctionne, démarrons le serveur et accédons à . Nous voyons un message indiquant que nous n’avons pas envoyé de jeton d’autorisation. Rendons-nous sur le terrain de jeu Auth0, ajoutons nos informations d’identification et obtenons un jeton. Ajoutez le code suivant sur le playground :
Pour nous assurer que nous pouvons obtenir un jeton, nous devrons accéder aux paramètres de notre application dans le tableau de bord Auth0 et l’ajouter à notre liste d’URL de rappel autorisées. Maintenant, connectons-nous ou créons un compte sur l’Auth0 Playground et nous obtiendrons une fenêtre contextuelle révélant notre jeton.
Pour vérifier le contenu de notre jeton, nous pouvons le décoder au jwt.io. Pour vérifier le jeton, nous aurons besoin de notre application Auth0 et nous devrons cocher la case secret base64 encode . Ce faisant, nous devrions maintenant voir le message « Signature vérifiée ».
Pour tester que notre API fonctionne avec ce jeton, nous devons faire une requête à et envoyer le jeton dans un en-tête d’autorisation. La façon la plus simple de le faire est d’utiliser une application comme Postman, qui simplifie les tests de point de terminaison d’API. Lors de l’appel, ajoutez un en-tête Authorization et pour la valeur ajoutez . Lorsque l’appel est effectué, le middleware examine la demande, s’assure que l’en-tête Authorization est au bon format, extrait le jeton, le vérifie et, s’il est vérifié, traite le reste de la demande. Nous n’avons utilisé que les paramètres par défaut pour présenter les capacités de JWT, mais vous pouvez en apprendre beaucoup plus via les docs.
Cas d’utilisation de l’authentification basée sur les jetons
Nous avons vu à quel point il est facile de mettre en œuvre l’authentification JWT et de sécuriser notre API. Pour conclure, examinons les cas d’utilisation pour lesquels l’authentification basée sur les jetons est la mieux adaptée.
- Applications de plate-forme en tant que service – exposant les API RESTful qui seront consommées par une variété de frameworks et de clients.
- Applications mobiles – mettre en œuvre des applications mobiles natives ou hybrides qui interagissent avec vos services.
- Single Page Applications (SPA) : création d’applications modernes avec des frameworks tels qu’Angular et React.
Pour obtenir des ressources supplémentaires sur la prise en main des jetons Web JSON, consultez ce billet.
Inscrivez-vous gratuitement
Commencez à construire dès aujourd’hui et sécurisez vos applications avec la plateforme d’identité Auth0 dès aujourd’hui.
Essayer gratuitement