Jetons JWT en C++ : bibliothèque jwt-cpp pour l'authentification

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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.git


Pour 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é role avec la valeur admin.


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) {

Recommendations