Autorización y autenticación en C++: bibliotecas y ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a la autenticación y autorización en C++



La autenticación (verificación de la identidad del usuario) y la autorización (verificación de los permisos de acceso) son componentes clave de seguridad de cualquier aplicación moderna. En C++, estas tareas se resuelven mediante bibliotecas especializadas que permiten implementar soporte para tokens JWT, OAuth 2.0, hash de contraseñas y gestión de sesiones. En este artículo, analizaremos las herramientas principales, su instalación y ejemplos de uso.



Bibliotecas principales para autenticación en C++



1. JWT-CPP — trabajo con JSON Web Tokens



JWT-CPP es una biblioteca ligera para crear y verificar tokens JWT. Soporta los algoritmos HMAC, RSA y ECDSA. Es ideal para API REST y microservicios.



Instalación:

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


Ejemplo de creación y verificación de token:

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

int main() { // Creación del token con 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;

// Verificación del 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 de usuario: " << 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 contraseñas



La biblioteca bcrypt-cpp proporciona un hash seguro de contraseñas utilizando el algoritmo Blowfish. Incluye generación automática de salt y protección contra ataques de fuerza bruta.



Ejemplo de uso:

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

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

// Hash de la contraseña std::string hash = BCrypt::generateHash(password); std::cout << "Hash: " << hash << std::endl;

// Verificación de la contraseña if (BCrypt::validatePassword(password, hash)) { std::cout << "¡Contraseña correcta!" << std::endl; } else { std::cout << "Contraseña inválida." << std::endl; } return 0;}


3. Cliente OAuth2 — integración con proveedores



Para implementar el inicio de sesión a través de Google, GitHub o Facebook, utilice la biblioteca cpp-httplib junto con el manejo manual de flujos OAuth2. Ejemplo de obtención de un access token mediante solicitudes HTTP:



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

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

// Parámetros de la solicitud (reemplácelos con los suyos) 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 << "Error al obtener el token" << std::endl; } return 0;}

Recommendations