Client OAuth pour C++ : bibliothèque liboauthcpp
Dans le développement web moderne, l'intégration avec des API externes via le protocole OAuth est devenue un standard de facto. Pour les développeurs C++, créer un client OAuth fiable peut être une tâche non triviale en raison de l'absence de support intégré dans la bibliothèque standard. liboauthcpp est une bibliothèque C++ légère et multiplateforme qui fournit des mécanismes prêts à l'emploi pour travailler avec OAuth 1.0a et un support partiel d'OAuth 2.0. Elle est idéale pour l'intégration dans des applications de bureau, des utilitaires serveur et des appareils IoT où les performances et les dépendances minimales sont critiques.
Fonctionnalités principales
- Support OAuth 1.0a — implémentation complète des signatures HMAC-SHA1 et RSA-SHA1.
- Mécanismes de base OAuth 2.0 — obtention du code d'autorisation et des identifiants client (sans jeton d'actualisation).
- Dépendances minimales — nécessite uniquement un compilateur C++11/14 et OpenSSL (ou un fournisseur cryptographique alternatif).
- Multiplateforme — fonctionne sur Linux, macOS, Windows (MinGW/MSVC).
- API simple — classes intuitives
OAuthClient,OAuthToken,OAuthRequest.
Installation
La méthode d'installation recommandée est via le système de paquets vcpkg ou la compilation à partir des sources :
# Via vcpkgvcpkg install liboauthcpp
# Ou compilation depuis GitHubgit clone https://github.com/lyokato/liboauthcpp.gitcd liboauthcppmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usr/localmake && sudo make installAprès l'installation, incluez le fichier d'en-tête et liez la bibliothèque :
#include <oauthcpp/oauthcpp.hpp>// Liaison : -loauthcpp -lssl -lcryptoExemple : OAuth 1.0a (API Twitter)
Considérons le scénario classique — envoyer un tweet via l'API Twitter v1.1 en utilisant OAuth 1.0a :
#include <iostream>#include <oauthcpp/oauthcpp.hpp>#include <curl/curl.h> // Pour le transport HTTP
int main() { // 1. Initialisation des identifiants oauthcpp::OAuthClient client( "YOUR_CONSUMER_KEY", "YOUR_CONSUMER_SECRET", oauthcpp::OAuthClient::HttpMethod::POST );
// 2. Définition des jetons utilisateur (obtenus précédemment) oauthcpp::OAuthToken accessToken( "USER_ACCESS_TOKEN", "USER_TOKEN_SECRET" ); client.setToken(accessToken);
// 3. Formation de la requête std::string url = "https://api.twitter.com/1.1/statuses/update.json"; oauthcpp::OAuthRequest request(url); request.addParameter("status", "Bonjour depuis le client OAuth C++ !");
// 4. Signature de la requête std::string signedUrl = client.sign(request);
// 5. Envoi via libcurl CURL* curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, signedUrl.c_str()); curl_easy_setopt(curl, CURLOPT_POST, 1L); // ... configuration SSL et traitement de la réponse curl_easy_perform(curl); curl_easy_cleanup(curl);
return 0;}Exemple : OAuth 2.0 (API Google)
Pour travailler avec OAuth 2.0, utilisez le mécanisme simplifié OAuth2Client (inclus dans liboauthcpp) :
#include <iostream>#include <oauthcpp/oauth2.hpp>
int main() { oauthcpp::OAuth2Client client( "YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "https://oauth2.googleapis.com/token" );
// Obtention du jeton via le code d'autorisation std::string authCode = "AUTH_CODE_FROM_REDIRECT"; oauthcpp::OAuthToken token = client.getAccessToken(authCode, "https://your-app.com/callback");
std::cout << "Access Token: " << token.getAccessToken() << std::endl; std::cout << "Expires in: " << token.getExpiresIn() & Aussi dans la bibliothèque
Bibliothèque standard JavaScript (Node.js) : aperçu complet
Générateur de QR codes en TypeScript : qrcode.js et qrcode-generator
Surveillance des applications Swift : bibliothèques et outils pour iOS/macOS
Travail avec les images : resize, crop en TypeScript