Comment intégrer les JWT ?
Intégrer les JWT dans mon application
Le site internet JWT.io regroupe de nombreuses librairies qui vous permettront d’intégrer très facilement les JWT à votre application, tous langages / frameworks confondus.
Chacune de ces librairies supporte différents claims et algorithmes de hachage qui peuvent être utilisés avec JWT. Le tout est de sélectionner une librairie qui convient à vos besoins et qui soit compatible avec la version de votre langage / framework.
Toutes ces librairies se basent sur la spécification officielle de JWT (RFC 7519) pour offrir, dans chaque langage de programmation, une bibliothèque de quelques fonctions permettant de gérer facilement (et de façon sécurisée) vos JWT !
Chaque librairie a ses spécificités et sa façon d’être utilisée / intégrée. Selon la librairie que vous choisirez, vous aurez ainsi accès à sa documentation et, souvent, à des exemples d’intégration qui vous permettront d’utiliser de manière intuitive les JWT. De manière générale, une librairie JWT repose sur deux fonctions essentielles : la création/encodage d’un jeton, la lecture/décodage d’un jeton (qui vérifiera souvent dans la foulée la validité du token).
Par exemple, en PHP avec la librairie Firebase PHP-JWT, voici à quoi ressemble la création (et l’encodage) d’un JWT Token :
<?php
use \Firebase\JWT\JWT;
$key = "example_key";
$payload = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);
$jwt = JWT::encode($payload, $key);
Et pour le décodage :
<?php
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);
Quand faut-il utiliser les JWT ?
De manière générale, si votre architecture permet une liaison client/serveur directe, comme c’est le cas avec des variables de session par exemple (embarquées dans de nombreux langages et frameworks), alors il n’est pas forcément nécessaire de vous compliquer la vie en optant pour une Token-Based Authentication avec JWT : une Session-Based Authentication fera très bien l’affaire.
Si votre application nécessite des communications entre client(s) et serveur(s) distants, l’utilisation de JWT constitue une très bonne méthode d’authentification (et d’autorisation) auprès du serveur. Pour ne citer que quelques exemples d’architectures où JWT serait tout à fait adapté :
- Serveur (PHP, NodeJS, Django, etc.) <—> Client web basé sur un framework JS (Vue, React, Angular, etc.)
- Serveur <—> Client application mobile (toutes technologies confondues)
- Serveur <—> Client lourd (i.e. client logiciel)
- Microservices (plusieurs petits serveurs indépendants) <—> Clients divers
- Etc.
De manière générale, les JWT sont des jetons puissants et sécurisés… A partir du moment où ils sont bien utilisés ! Je vous recommande donc dans tous les cas de les manier avec précaution : durée d’expiration des jetons, clé secrète à conserver avec précaution, communications obligatoirement par HTTPS, etc.
JWT Token : quelles alternatives ?
Bien que JWT soit certainement l’un des protocoles les plus populaires (si non “le plus” populaire) dans sa catégorie, voici quelques alternatives possibles :
Il faut bien distinguer les frameworks, protocoles et spécifications. Comme expliqué précédemment, JWT n’est ni plus ni moins que la spécification d’un format de jeton : ce n’est ni un protocole, ni un framework d’authentification.
Les services comme OAuth, OpenID et bien d’autres ne sont donc pas des "alternatives" au sens premier du terme puisque ce sont des frameworks et/ou protocoles (et plusieurs d’entre eux intègrent d’ailleurs l’utilisation de JWT).