عميل OAuth للغة C++: مكتبة liboauthcpp
في تطوير الويب الحديث، أصبح التكامل مع واجهات برمجة التطبيقات الخارجية عبر بروتوكول OAuth معيارًا واقعيًا. بالنسبة لمطوري C++، قد يكون إنشاء عميل OAuth موثوق به مهمة غير تافهة بسبب عدم وجود دعم مدمج في المكتبة القياسية. liboauthcpp هي مكتبة خفيفة الوزن ومتعددة المنصات بلغة C++ توفر آليات جاهزة للعمل مع OAuth 1.0a ودعم جزئي لـ OAuth 2.0. إنها مثالية للتضمين في تطبيقات سطح المكتب والأدوات المساعدة للخوادم وأجهزة إنترنت الأشياء، حيث تكون الأداء والاعتماديات البسيطة أمرًا بالغ الأهمية.
الإمكانيات الرئيسية
- دعم OAuth 1.0a — تنفيذ كامل لتوقيعات HMAC-SHA1 و RSA-SHA1.
- آليات أساسية لـ OAuth 2.0 — الحصول على رمز التفويض (Authorization Code) وبيانات اعتماد العميل (Client Credentials) (بدون رمز التحديث Refresh Token).
- اعتماديات بسيطة — يتطلب فقط مترجم C++11/14 و OpenSSL (أو مزود تشفير بديل).
- متعددة المنصات — تعمل على Linux و macOS و Windows (MinGW/MSVC).
- واجهة برمجة تطبيقات بسيطة — فئات بديهية
OAuthClientوOAuthTokenوOAuthRequest.
التثبيت
الطريقة الموصى بها للتثبيت هي عبر نظام الحزم vcpkg أو البناء من المصدر:
# عبر vcpkgvcpkg install liboauthcpp
# أو البناء من GitHubgit clone https://github.com/lyokato/liboauthcpp.gitcd liboauthcppmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usr/localmake && sudo make installبعد التثبيت، قم بتضمين ملف الرأس والربط مع المكتبة:
#include <oauthcpp/oauthcpp.hpp>// الربط: -loauthcpp -lssl -lcryptoمثال: OAuth 1.0a (Twitter API)
لننظر في سيناريو كلاسيكي — إرسال تغريدة عبر Twitter API v1.1 باستخدام OAuth 1.0a:
#include <iostream>#include <oauthcpp/oauthcpp.hpp>#include <curl/curl.h> // لنقل HTTP
int main() { // 1. تهيئة بيانات الاعتماد oauthcpp::OAuthClient client( "YOUR_CONSUMER_KEY", "YOUR_CONSUMER_SECRET", oauthcpp::OAuthClient::HttpMethod::POST );
// 2. تعيين رموز المستخدم (تم الحصول عليها مسبقًا) oauthcpp::OAuthToken accessToken( "USER_ACCESS_TOKEN", "USER_TOKEN_SECRET" ); client.setToken(accessToken);
// 3. تشكيل الطلب std::string url = "https://api.twitter.com/1.1/statuses/update.json"; oauthcpp::OAuthRequest request(url); request.addParameter("status", "مرحبًا من عميل C++ OAuth!");
// 4. توقيع الطلب std::string signedUrl = client.sign(request);
// 5. الإرسال عبر libcurl CURL* curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, signedUrl.c_str()); curl_easy_setopt(curl, CURLOPT_POST, 1L); // ... إعداد SSL ومعالجة الرد curl_easy_perform(curl); curl_easy_cleanup(curl);
return 0;}مثال: OAuth 2.0 (Google API)
للعمل مع OAuth 2.0، استخدم الآلية المبسطة OAuth2Client (المضمنة في liboauthcpp):
#include <iostream>#include <oauthcpp/oauth2.hpp>
int main() { oauthcpp::OAuth2Client client( "YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "https://oauth2.googleapis.com/token" );
// الحصول على الرمز عبر رمز التفويض 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() &