Autorização e Autenticação em C++: Bibliotecas e Exemplos Práticos

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

Introdução à Autenticação e Autorização em C++



Autenticação (verificação da identidade do usuário) e autorização (verificação de permissões de acesso) são componentes-chave de segurança de qualquer aplicação moderna. Em C++, essas tarefas são resolvidas com bibliotecas especializadas que permitem implementar suporte a tokens JWT, OAuth 2.0, hash de senhas e gerenciamento de sessões. Neste artigo, abordaremos as principais ferramentas, sua instalação e exemplos de uso.



Principais Bibliotecas para Autenticação em C++



1. JWT-CPP — Trabalhando com JSON Web Tokens



JWT-CPP é uma biblioteca leve para criar e verificar tokens JWT. Suporta os algoritmos HMAC, RSA e ECDSA. Ideal para APIs REST e microsserviços.



Instalação:

git clone https://github.com/Thalhammer/jwt-cppcd jwt-cppmkdir build && cd buildcmake ..make && make install


Exemplo de criação e verificação de token:

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

int main() { // Criando token com payload auto token = jwt::create() .set_issuer("auth.example.com") .set_type("JWS") .set_payload_claim("user_id", jwt::claim(std::string("12345"))) .sign(jwt::algorithm::hs256{"secret_key"});

std::cout << "Token: " << token << std::endl;

// Verificando token auto decoded = jwt::decode(token); auto verifier = jwt::verify() .allow_algorithm(jwt::algorithm::hs256{"secret_key"}) .with_issuer("auth.example.com");

try { verifier.verify(decoded); std::cout << "Token válido. ID do usuário: " << decoded.get_payload_claim("user_id").as_string() << std::endl; } catch (const std::exception& e) { std::cerr << "Token inválido: " << e.what() << std::endl; } return 0;}


2. bcrypt-cpp — Hash de Senhas



A biblioteca bcrypt-cpp fornece hash seguro de senhas usando o algoritmo Blowfish. Inclui geração automática de salt e proteção contra ataques de força bruta.



Exemplo de uso:

#include <bcrypt/BCrypt.hpp>#include <iostream>

int main() { std::string password = "SuperSecret123!";

// Gerando hash da senha std::string hash = BCrypt::generateHash(password); std::cout << "Hash: " << hash << std::endl;

// Verificando senha if (BCrypt::validatePassword(password, hash)) { std::cout << "Senha correta!" << std::endl; } else { std::cout << "Senha inválida." << std::endl; } return 0;}


3. Cliente OAuth2 — Integração com Provedores



Para implementar login via Google, GitHub ou Facebook, use a biblioteca cpp-httplib em conjunto com o tratamento manual dos fluxos OAuth2. Exemplo de obtenção de access token via requisições HTTP:



#include <httplib.h>#include <nlohmann/json.hpp>#include <iostream>

int main() { httplib::Client cli("https://oauth2.googleapis.com");

// Parâmetros da requisição (substitua pelos seus) auto res = cli.Post("/token", { {"code", "authorization_code"}, {"client_id", "YOUR_CLIENT_ID"}, {"client_secret", "YOUR_CLIENT_SECRET"}, {"redirect_uri", "http://localhost:8080/callback"}, {"grant_type", "authorization_code"} });

if (res && res->status == 200) { auto json = nlohmann::json::parse(res->body); std::cout << "Access token: " << json["access_token"].get<std::string>() << std::endl; } else { std::cerr << "Falha ao obter token" << std::endl; } return 0;}

Recommendations