Tokens JWT em C++: biblioteca jwt-cpp para autenticação

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Tokens JWT em C++: biblioteca jwt-cpp



JSON Web Token (JWT) é um padrão aberto (RFC 7519) para criação de tokens de acesso baseados em JSON. Em C++, a biblioteca jwt-cpp (autor Thalhammer) é amplamente utilizada para trabalhar com JWT. Ela fornece uma API conveniente para criar, verificar e decodificar tokens JWT com suporte a vários algoritmos de assinatura (HS256, RS256, etc.).



A biblioteca é escrita em C++17 moderno, não requer dependências externas (exceto OpenSSL para algoritmos assimétricos) e é ativamente mantida pela comunidade.



Instalação do jwt-cpp



A maneira mais simples de instalar é através do gerenciador de pacotes vcpkg ou Conan:



// Via vcpkgvcpkg install jwt-cpp

// Via Conanconan install jwt-cpp/0.7.0@

// Ou copiar o arquivo de cabeçalho para o projetogit clone https://github.com/Thalhammer/jwt-cpp.git


Para compilar com CMake, basta especificar:



find_package(jwt-cpp REQUIRED)target_link_libraries(myapp jwt-cpp::jwt-cpp)


Principais funcionalidades



  • Criação de tokens com claims arbitrários (sub, iss, exp, custom).
  • Verificação de assinatura e validação de tempo de vida (exp, nbf).
  • Decodificação do payload sem verificação (para depuração).
  • Suporte a algoritmos: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512.
  • Validadores personalizados — é possível adicionar validação de qualquer campo.


Exemplo 1: Criação de token JWT (HS256)



#include <jwt-cpp/jwt.h>#include <iostream>

int main() { // Criando token com algoritmo 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 << "Token criado:" << token << std::endl; return 0;}


Neste exemplo, criamos um token com:

  • tipo JWT,
  • emissor auth.pythonlib.ru,
  • sujeito user123,
  • validade de 1 hora,
  • campo personalizado role com valor admin.


Exemplo 2: Verificação e decodificação



#include <jwt-cpp/jwt.h>#include <iostream>

int main() { std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // Seu token

try { // Decodificando sem verificar assinatura (apenas para ler o payload) auto decoded = jwt::decode(token); std::cout << "Issuer: " << decoded.get_issuer() << std::endl; std::cout << "Subject: " << decoded.get_subject() << std::endl;

// Verificando assinatura e tempo de vida auto verifier = jwt::verify() .allow_algorithm(jwt::algorithm::hs256{"secret_key_12345"}) .with_issuer("auth.pythonlib.ru");

verifier.verify(decoded); std::cout << "Token válido!" << std::endl;

} catch (const jwt::TokenExpiredError& e) { std::cerr << "Erro: token expirado" << std::endl; } catch (const jwt::InvalidAlgorithmError& e) { std::cerr << "Erro: algoritmo inválido" << std::endl; } catch (const std::exception& e) { std::cerr << "Erro de verificação: " << e.what() << std::endl; }

return 0;}


Exemplo 3: Trabalhando com chaves assimétricas (RS256)



#include <jwt-cpp/jwt.h>#include <fstream>#include <sstream>

std::string read_file(const std::string& path) {

Recommendations