Bibliothèque cpp-httplib : client OAuth 2.0 en C++ pour applications web

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client OAuth 2.0 en C++ avec cpp-httplib

\n\n

Dans le développement logiciel moderne, l'intégration avec des services externes via OAuth 2.0 est devenue un standard de facto. Pour le langage C++, traditionnellement associé à la programmation système, il existe plusieurs façons d'implémenter un client OAuth. L'une des solutions les plus légères et efficaces est la bibliothèque cpp-httplib — une bibliothèque HTTP/HTTPS à en-tête unique qui permet de créer à la fois des applications serveur et client sans dépendances externes.

\n\n

Dans cet article, nous allons voir comment utiliser cpp-httplib pour construire un client OAuth 2.0 complet, capable de s'authentifier via Google, GitHub, VK et d'autres fournisseurs. Ce contenu est destiné aux programmeurs C++ souhaitant ajouter une authentification à des applications de bureau ou embarquées.

\n\n

Qu'est-ce que cpp-httplib ?

\n\n

cpp-httplib (également connue sous le nom de httplib.h) est une bibliothèque header-only pour C++11/14/17, écrite par Yuji Hirose. Elle fournit une API simple et intuitive pour effectuer des requêtes HTTP et créer des serveurs HTTP. Elle prend en charge SSL/TLS (via OpenSSL ou MbedTLS), les proxys, les cookies et les requêtes asynchrones.

\n\n
    \n
  • Header-only — il suffit de copier un fichier dans le projet.
  • \n
  • Prise en charge HTTPS — connexion sécurisée pour OAuth.
  • \n
  • Faible taille — environ 8000 lignes de code.
  • \n
  • Multiplateforme — Windows, Linux, macOS, BSD.
  • \n
\n\n

Pour OAuth 2.0, nous devrons effectuer des requêtes GET et POST vers les endpoints du fournisseur, ainsi que gérer les redirections. cpp-httplib s'en sort parfaitement.

\n\n

Architecture d'un client OAuth 2.0 en C++

\n\n

Le flux typique du code d'autorisation OAuth 2.0 comprend les étapes suivantes :

\n
    \n
  1. L'application ouvre le navigateur de l'utilisateur avec l'URL d'autorisation.
  2. \n
  3. L'utilisateur confirme l'accès.
  4. \n
  5. Le fournisseur redirige vers l'URL de callback avec un code temporaire.
  6. \n
  7. L'application échange le code contre un access token.
  8. \n
  9. À l'aide du token, des requêtes sont effectuées vers l'API.
  10. \n
\n\n

En C++, nous pouvons implémenter cela en lançant un serveur HTTP local (avec cpp-httplib) pour intercepter le callback. Alternativement, on peut utiliser un navigateur intégré et suivre l'URL via des événements système, mais l'approche serveur est plus simple.

\n\n

Exemple d'implémentation : OAuth via GitHub

\n\n

Considérons un exemple complet d'un client qui s'authentifie via GitHub OAuth. Pour cela, il faudra enregistrer une application OAuth sur GitHub et obtenir un Client ID et un Client Secret.

\n\n
#include <httplib.h>\n#include <iostream>\n#include <string>\n#include <thread>\n#include <regex>\n\n// Configuration\nconst std::string CLIENT_ID = "votre_client_id";\nconst std::string CLIENT_SECRET = "votre_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        // Extraction du code depuis les paramètres de la requête\n        if (req.has_param("code")) {\n            auth_code = req.get_param_value("code");\n            res.set_content("<h2>Autorisation réussie ! Fermez la fenêtre.</h2>", "text/html");\n            svr.stop();\n        } else {\n            res.set_content("<h2>Erreur d'autorisation</h2>", "text/html");\n        }\n    });\n    \n    std::cout << "Serveur démarré sur le port 8080..." << std::endl;\n    svr.listen("0.0.0.0", 8080);\n}\n\nint main() {\n    // Étape 1 : Construction de l'URL d'autorisation\n    std::string auth_url = AUTH_URL + "?clien                    

Recommendations