OAuth 2.0-Client in C++ mit cpp-httplib
\n\nIn der modernen Softwareentwicklung ist die Integration mit externen Diensten über OAuth 2.0 zum De-facto-Standard geworden. Für die Sprache C++, die traditionell mit Systemprogrammierung assoziiert wird, gibt es mehrere Möglichkeiten, einen OAuth-Client zu implementieren. Eine der einfachsten und effizientesten Lösungen ist die Bibliothek cpp-httplib – eine Single-Header-HTTP/HTTPS-Bibliothek, die es ermöglicht, sowohl Server- als auch Client-Anwendungen ohne externe Abhängigkeiten zu erstellen.
\n\nIn diesem Artikel werden wir untersuchen, wie man cpp-httplib verwendet, um einen vollwertigen OAuth 2.0-Client zu erstellen, der sich über Google, GitHub, VK und andere Anbieter autorisieren kann. Das Material richtet sich an C++-Programmierer, die Desktop- oder eingebetteten Anwendungen eine Authentifizierung hinzufügen möchten.
\n\nWas ist cpp-httplib?
\n\ncpp-httplib (auch bekannt als httplib.h) ist eine Header-only-Bibliothek für C++11/14/17, geschrieben von Yuji Hirose. Sie bietet eine einfache und intuitive API zum Ausführen von HTTP-Anfragen und zum Erstellen von HTTP-Servern. Unterstützt SSL/TLS (über OpenSSL oder MbedTLS), Proxys, Cookies und asynchrone Anfragen.
- \n
- Header-only – es reicht, eine einzige Datei in das Projekt zu kopieren. \n
- HTTPS-Unterstützung – sichere Verbindung für OAuth. \n
- Kleine Größe – etwa 8000 Zeilen Code. \n
- Plattformunabhängigkeit – Windows, Linux, macOS, BSD. \n
Für OAuth 2.0 müssen wir GET- und POST-Anfragen an die Endpunkte des Anbieters senden sowie Weiterleitungen verarbeiten. cpp-httplib meistert dies hervorragend.
\n\nArchitektur eines OAuth 2.0-Clients in C++
\n\nEin typischer OAuth 2.0 Authorization Code Flow umfasst die folgenden Schritte:
\n- \n
- Die Anwendung öffnet den Browser des Benutzers mit der Autorisierungs-URL. \n
- Der Benutzer bestätigt den Zugriff. \n
- Der Anbieter leitet zur Callback-URL mit einem temporären Code weiter. \n
- Die Anwendung tauscht den Code gegen ein Access Token ein. \n
- Mit dem Token werden Anfragen an die API gesendet. \n
In C++ können wir dies implementieren, indem wir einen lokalen HTTP-Server (mit cpp-httplib) starten, um den Callback abzufangen. Alternativ kann ein eingebetteter Browser verwendet und die URL über Systemereignisse verfolgt werden, aber der Server-Ansatz ist einfacher.
\n\nImplementierungsbeispiel: OAuth über GitHub
\n\nBetrachten wir ein vollständiges Beispiel eines Clients, der sich über GitHub OAuth autorisiert. Dafür muss eine OAuth-App bei GitHub registriert und eine Client-ID sowie ein Client-Secret eingeholt werden.
\n\n#include <httplib.h>\n#include <iostream>\n#include <string>\n#include <thread>\n#include <regex>\n\n// Konfiguration\nconst std::string CLIENT_ID = "ihre_client_id";\nconst std::string CLIENT_SECRET = "ihr_client_secret";\nconst std::string REDIRECT_URI = "http://localhost:8080/callback";\nconst std::string AUTH_URL = "https://github.com/login/oauth/authorize";\nconst std::string TOKEN_URL = "https://github.com/login/oauth/access_token";\nconst std::string API_URL = "https://api.github.com/user";\n\nstd::string auth_code;\n\nvoid start_local_server() {\n httplib::Server svr;\n \n svr.Get("/callback", [&](const httplib::Request& req, httplib::Response& res) {\n // Extrahiere den Code aus den Query-Parametern\n if (req.has_param("code")) {\n auth_code = req.get_param_value("code");\n res.set_content("<h2>Autorisierung erfolgreich! Schließen Sie das Fenster.</h2>", "text/html");\n svr.stop();\n } else {\n res.set_content("<h2>Autorisierungsfehler</h2>", "text/html");\n }\n });\n \n std::cout << "Server gestartet auf Port 8080..." << std::endl;\n svr.listen("0.0.0.0", 8080);\n}\n\nint main() {\n // Schritt 1: Erstelle die Autorisierungs-URL\n std::string auth_url = AUTH_URL + "?clien Auch in der Bibliothek
Arbeiten mit Excel in Rust: Bibliotheken zum Lesen und Schreiben
Arbeit mit S3 und Cloud-Speichern in JavaScript (Node.js) — die Bibliothek @aws-sdk/client-s3
Arbeiten mit Bildern in PHP: Resize, Crop und Optimierung mit GD und Imagick