Jetons JWT en C++ : bibliothèque jwt-cpp
\n\nJSON Web Token (JWT) est un moyen compact et autonome de transmettre des informations entre les parties sous la forme d'un objet JSON. En C++, il existe plusieurs bibliothèques pour travailler avec JWT, mais l'une des plus populaires et des plus pratiques est jwt-cpp. Elle fournit une API simple pour créer, signer et vérifier des jetons JWT en utilisant différents algorithmes (HMAC, RSA, ECDSA).
\n\nDans cet article, nous explorerons les principales fonctionnalités de la bibliothèque jwt-cpp, apprendrons à créer et vérifier des jetons, et analyserons des exemples de code pour des tâches typiques.
\n\nInstallation de jwt-cpp
\n\nLa bibliothèque jwt-cpp est header-only (uniquement composée d'en-têtes), ce qui simplifie son intégration dans un projet. Pour l'installer, il suffit de cloner le dépôt :
\n\ngit clone https://github.com/Thalhammer/jwt-cpp.git\n\nEnsuite, ajoutez le chemin vers le dossier include dans les paramètres de votre compilateur. Si vous utilisez CMake, l'inclusion ressemblera à ceci :
add_subdirectory(jwt-cpp)\ntarget_link_libraries(your_project jwt-cpp)\n\nLa bibliothèque dépend de OpenSSL et de jsoncpp (ou nlohmann/json), alors assurez-vous qu'ils sont installés.
Création de base d'un jeton JWT
\n\nL'exemple le plus simple est la création d'un jeton en utilisant l'algorithme HMAC-SHA256. Vous pouvez ajouter des champs standard (iss, sub, exp, iat) et des claims personnalisés au jeton.
\n\n#include <jwt-cpp/jwt.h>\n#include <iostream>\n\nint main() {\n // Création du jeton\n auto token = jwt::create()\n .set_issuer("auth0")\n .set_subject("1234567890")\n .set_issued_at(std::chrono::system_clock::now())\n .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{1})\n .set_payload_claim("name", jwt::claim(std::string("John Doe")))\n .sign(jwt::algorithm::hs256{"secret-key"});\n\n std::cout << "Jeton : " << token << std::endl;\n return 0;\n}\n\nLe résultat sera une chaîne composée de trois parties (header, payload, signature), séparées par des points.
\n\nVérification du jeton
\n\nPour vérifier l'authenticité du jeton, vous devez utiliser la même clé secrète (ou la clé publique pour RSA). Exemple de vérification :
\n\n#include <jwt-cpp/jwt.h>\n#include <iostream>\n\nint main() {\n std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // votre jeton\n\n try {\n auto decoded = jwt::decode(token);\n \n // Vérification de la signature\n auto verifier = jwt::verify()\n .allow_algorithm(jwt::algorithm::hs256{"secret-key"})\n .with_issuer("auth0");\n\n verifier.verify(decoded);\n\n // Extraction des données\n std::cout << "Jeton valide !" << std::endl;\n std::cout << "Subject : " << decoded.get_subject() << std::endl;\n std::cout << "Nom : " << decoded.get_payload_claim("name").as_string() << std::endl;\n } catch (const std::exception& e) {\n std::cerr << "Erreur de vérification : " << e.what() << std::endl;\n }\n\n return 0;\n}\n\nImportant : si le jeton est expiré (exp), modifié ou signé avec une autre clé, une exception sera levée.
\n\nUtilisation de RSA (chiffrement asymétrique)
\n\nPour des systèmes plus sécurisés, on utilise souvent RSA. Dans ce cas, le jeton est signé avec une clé privée et vérifié avec une clé publique.
\n\n#include <jwt-cpp/jwt.h>\n#include <fstream>\n#include <sstream>\n\nint main() {\n // Lecture de la clé privée depuis un fichier\n std::ifstream priv_file("private.pem");\n std::stringstream priv_ss;\n priv_ss << priv_file.rdbuf();\n std::string private_key = priv_ss.str();\n\n // Création du jeton avec RSA\n auto token = jwt::create()\n .set_issuer("myapp")\n .set_subject("user123" Aussi dans la bibliothèque
Planificateur de tâches en TypeScript : guide complet des bibliothèques cron et des minuteurs
AssertJ pour Java : guide complet avec exemples
GraphQL en Go : Guide complet de la bibliothèque gqlgen
Travailler avec Kafka en Go (Golang) : la bibliothèque segmentio/kafka-go