Jetons JWT en C++ : bibliothèque jwt-cpp
JSON Web Token (JWT) est un standard ouvert (RFC 7519) pour la création de jetons d'accès basés sur JSON. En C++, la bibliothèque jwt-cpp (auteur Thalhammer) est largement utilisée pour travailler avec JWT. Elle fournit une API pratique pour créer, vérifier et décoder les jetons JWT avec le support de divers algorithmes de signature (HS256, RS256, etc.).
La bibliothèque est écrite en C++17 moderne, ne nécessite pas de dépendances externes (sauf OpenSSL pour les algorithmes asymétriques) et est activement maintenue par la communauté.
Installation de jwt-cpp
La façon la plus simple de l'installer est via le gestionnaire de paquets vcpkg ou Conan :
// Via vcpkgvcpkg install jwt-cpp
// Via Conanconan install jwt-cpp/0.7.0@
// Ou copier le fichier d'en-tête dans le projetgit clone https://github.com/Thalhammer/jwt-cpp.gitPour la compilation avec CMake, il suffit de spécifier :
find_package(jwt-cpp REQUIRED)target_link_libraries(myapp jwt-cpp::jwt-cpp)Fonctionnalités principales
- Création de jetons avec des claims arbitraires (sub, iss, exp, custom).
- Vérification de la signature et contrôle de la durée de vie (exp, nbf).
- Décodage du payload sans vérification (pour le débogage).
- Support des algorithmes : HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512.
- Validateurs personnalisés — possibilité d'ajouter la vérification de n'importe quels champs.
Exemple 1 : Création d'un jeton JWT (HS256)
#include <jwt-cpp/jwt.h>#include <iostream>
int main() { // Création du jeton avec l'algorithme HS256 auto token = jwt::create() .set_type("JWT") .set_issuer("auth.pythonlib.ru") .set_subject("user123") .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{1}) .set_payload_claim("role", jwt::claim(std::string("admin"))) .sign(jwt::algorithm::hs256{"secret_key_12345"});
std::cout << "Jeton créé :" << token << std::endl; return 0;}Dans cet exemple, nous avons créé un jeton avec :
- le type JWT,
- l'émetteur
auth.pythonlib.ru, - le sujet
user123, - une durée de validité de 1 heure,
- un champ personnalisé
roleavec la valeuradmin.
Exemple 2 : Vérification et décodage
#include <jwt-cpp/jwt.h>#include <iostream>
int main() { std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // Votre jeton
try { // Décodage sans vérification de la signature (lecture du payload uniquement) auto decoded = jwt::decode(token); std::cout << "Émetteur : " << decoded.get_issuer() << std::endl; std::cout << "Sujet : " << decoded.get_subject() << std::endl;
// Vérification de la signature et de la durée de vie auto verifier = jwt::verify() .allow_algorithm(jwt::algorithm::hs256{"secret_key_12345"}) .with_issuer("auth.pythonlib.ru");
verifier.verify(decoded); std::cout << "Jeton valide !" << std::endl;
} catch (const jwt::TokenExpiredError& e) { std::cerr << "Erreur : jeton expiré" << std::endl; } catch (const jwt::InvalidAlgorithmError& e) { std::cerr << "Erreur : algorithme invalide" << std::endl; } catch (const std::exception& e) { std::cerr << "Erreur de vérification : " << e.what() << std::endl; }
return 0;}Exemple 3 : Travail avec des clés asymétriques (RS256)
#include <jwt-cpp/jwt.h>#include <fstream>#include <sstream>
std::string read_file(const std::string& path) { Aussi dans la bibliothèque
Envoi d'Email en PHP : PHPMailer, mail() et alternatives
Planificateur de tâches Kotlin : aperçu et exemples d'utilisation
Configuration des applications PHP : bibliothèques et outils pour la gestion des paramètres
Génération de PDF en Kotlin : meilleures bibliothèques et exemples de code