Autorisierung und Authentifizierung in C++: Bibliotheken und Implementierung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Autorisierung und Authentifizierung in C++: Ein Überblick über Werkzeuge und Implementierung



In der modernen C++-Entwicklung stehen Sicherheitsfragen an erster Stelle. Unabhängig davon, ob Sie eine Serveranwendung, einen Desktop-Client oder ein eingebettetes System entwickeln, sind Mechanismen zur Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte) von entscheidender Bedeutung. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Ansätze zur Implementierung dieser Mechanismen in C++.



Grundlegende Konzepte

Bevor wir zu den Werkzeugen übergehen, ist es wichtig, zwei Begriffe voneinander abzugrenzen:

  • Authentifizierung — der Prozess der Überprüfung, ob ein Benutzer der ist, der er vorgibt zu sein (Login + Passwort, Biometrie, Token).
  • Autorisierung — die Bestimmung, welche Ressourcen und Operationen einem authentifizierten Benutzer zur Verfügung stehen (Rollen, Rechte, ACL).


Bibliotheken für die Authentifizierung in C++



1. libbcrypt — Passwort-Hashing

Für die sichere Speicherung von Passwörtern sollten Sie niemals Klartext oder MD5 verwenden. libbcrypt ist eine C++-Implementierung des bcrypt-Algorithmus, dem Industriestandard für Passwort-Hashing.

#include <bcrypt/bcrypt.h>#include <iostream>

int main() { const char* password = "my_secure_pass123"; char salt[BCRYPT_HASHSIZE]; char hash[BCRYPT_HASHSIZE];

// Generierung von Salt und Hash bcrypt_gensalt(12, salt); // 12 Runden (Kostenfaktor) bcrypt_hashpw(password, salt, hash);

std::cout << "Hash: " << hash << std::endl;

// Passwort-Überprüfung const char* test_pass = "my_secure_pass123"; if (bcrypt_checkpw(test_pass, hash) == 0) { std::cout << "Passwort ist korrekt!" << std::endl; } else { std::cout << "Falsches Passwort." << std::endl; } return 0;}


2. jwt-cpp — Arbeiten mit JWT-Tokens

JSON Web Tokens (JWT) werden in REST-APIs häufig zur Übertragung von Authentifizierungsdaten verwendet. Die Bibliothek jwt-cpp bietet eine benutzerfreundliche Schnittstelle zum Erstellen und Verifizieren von Tokens.

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

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

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

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

try { verifier.verify(decoded); auto user_id = decoded.get_payload_claim("user_id").as_string(); std::cout << "User ID: " << user_id << std::endl; } catch (const std::exception& e) { std::cerr << "Verifizierungsfehler: " << e.what() << std::endl; } return 0;}


3. cpp-httplib + OAuth2 — Authentifizierung über Drittanbieterdienste

Zur Implementierung von OAuth2 (z. B. Anmeldung über Google oder GitHub) wird häufig eine Kombination aus HTTP-Client und einer Bibliothek für die Arbeit mit JSON verwendet. cpp-httplib ist eine schlanke Bibliothek für HTTP-Anfragen.

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

using json = nlohmann::json;

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

// Parameter zum Abrufen des Tokens (vereinfacht) auto res = cli.Post("/token", { {"code", "authorization_code_from_redirect"}, {"client_id", "your_client_id"}, {"client_secret", "your_client_s

Empfehlungen