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 installEjemplo 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;} También en la biblioteca
Trabajo con Excel en Go (Golang): bibliotecas Excelize, xlsx, tealeg
Tokens JWT en C# (.NET): guía completa con ejemplos
Caché en Rust: Redis, Memcached y soluciones integradas
Trabajo con imágenes en Kotlin: bibliotecas, herramientas y ejemplos
Lottie Android para Kotlin: guía completa con ejemplos