JWT-Token in C++: Bibliothek jwt-cpp
\n\nJSON Web Token (JWT) ist eine kompakte und eigenständige Methode zur Übertragung von Informationen zwischen Parteien als JSON-Objekt. In C++ gibt es mehrere Bibliotheken für die Arbeit mit JWT, aber eine der beliebtesten und bequemsten ist jwt-cpp. Sie bietet eine einfache API zum Erstellen, Signieren und Verifizieren von JWT-Token unter Verwendung verschiedener Algorithmen (HMAC, RSA, ECDSA).
\n\nIn diesem Artikel werden wir die wichtigsten Funktionen der Bibliothek jwt-cpp betrachten, lernen, Token zu erstellen und zu überprüfen, und Codebeispiele für typische Aufgaben analysieren.
\n\nInstallation von jwt-cpp
\n\nDie Bibliothek jwt-cpp ist header-only, was die Integration in ein Projekt vereinfacht. Zur Installation reicht es, das Repository zu klonen:
\n\ngit clone https://github.com/Thalhammer/jwt-cpp.git\n\nFügen Sie dann den Pfad zum Ordner include in den Einstellungen Ihres Compilers hinzu. Wenn Sie CMake verwenden, sieht die Einbindung wie folgt aus:
add_subdirectory(jwt-cpp)\ntarget_link_libraries(your_project jwt-cpp)\n\nDie Bibliothek hängt von OpenSSL und jsoncpp (oder nlohmann/json) ab, stellen Sie daher sicher, dass diese installiert sind.
Grundlegende Erstellung eines JWT-Tokens
\n\nDas einfachste Beispiel ist die Erstellung eines Tokens mit dem HMAC-SHA256-Algorithmus. Dem Token können Standardfelder (iss, sub, exp, iat) und benutzerdefinierte Claims hinzugefügt werden.
\n\n#include <jwt-cpp/jwt.h>\n#include <iostream>\n\nint main() {\n // Token erstellen\n auto token = jwt::create()\n .set_issuer("auth0")\n .set_subject("1234567890")\n .set_issued_at(std::chrono::system_clock::now())\n .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{1})\n .set_payload_claim("name", jwt::claim(std::string("John Doe")))\n .sign(jwt::algorithm::hs256{"secret-key"});\n\n std::cout << "Token: " << token << std::endl;\n return 0;\n}\n\nAls Ergebnis erhalten wir eine Zeichenfolge, die aus drei Teilen (Header, Payload, Signatur) besteht, getrennt durch Punkte.
\n\nVerifizierung des Tokens
\n\nZur Überprüfung der Authentizität des Tokens muss derselbe geheime Schlüssel (oder der öffentliche Schlüssel für RSA) verwendet werden. Beispiel für die Verifizierung:
\n\n#include <jwt-cpp/jwt.h>\n#include <iostream>\n\nint main() {\n std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // Ihr Token\n\n try {\n auto decoded = jwt::decode(token);\n \n // Signatur prüfen\n auto verifier = jwt::verify()\n .allow_algorithm(jwt::algorithm::hs256{"secret-key"})\n .with_issuer("auth0");\n\n verifier.verify(decoded);\n\n // Daten extrahieren\n std::cout << "Token ist gültig!" << std::endl;\n std::cout << "Subject: " << decoded.get_subject() << std::endl;\n std::cout << "Name: " << decoded.get_payload_claim("name").as_string() << std::endl;\n } catch (const std::exception& e) {\n std::cerr << "Verifizierungsfehler: " << e.what() << std::endl;\n }\n\n return 0;\n}\n\nWichtig: Wenn das Token abgelaufen ist (exp), geändert oder mit einem anderen Schlüssel signiert wurde, wird eine Ausnahme ausgelöst.
\n\nArbeit mit RSA (asymmetrische Verschlüsselung)
\n\nFür sicherere Systeme wird häufig RSA verwendet. In diesem Fall wird das Token mit einem privaten Schlüssel signiert und mit einem öffentlichen Schlüssel verifiziert.
\n\n#include <jwt-cpp/jwt.h>\n#include <fstream>\n#include <sstream>\n\nint main() {\n // Privaten Schlüssel aus Datei lesen\n std::ifstream priv_file("private.pem");\n std::stringstream priv_ss;\n priv_ss << priv_file.rdbuf();\n std::string private_key = priv_ss.str();\n\n // Token mit RSA erstellen\n auto token = jwt::create()\n .set_issuer("myapp")\n .set_subject("user123" Auch in der Bibliothek
PDF-Erstellung in Swift (iOS/macOS): UIGraphicsPDFRenderer, PDFKit und Core Graphics
PDF-Generierung in Java: Überblick über die Bibliotheken iText, Apache PDFBox, OpenPDF
Prometheus-Metriken in TypeScript: Vollständiger Leitfaden zum Monitoring
OAuth-Client für C# (.NET): Implementierung der Autorisierung über Drittanbieterdienste