OAuth 2.0 و JWT التفويض بلغة C++: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في OAuth 2.0 وتفويض JWT باستخدام C++

في عالم تطوير الويب الحديث، يلعب الأمان وسهولة المصادقة دورًا رئيسيًا. أصبح OAuth 2.0 و JWT (JSON Web Tokens) المعايير الفعلية لتنفيذ التفويض في الأنظمة الموزعة. في هذه المقالة، سننظر في كيفية تنفيذ تفويض OAuth 2.0 و JWT بلغة C++ — وهي لغة قوية وعالية الأداء تُستخدم غالبًا لإنشاء تطبيقات خادم عالية التحميل.

على الرغم من أن C++ ليست الخيار النموذجي لتطوير الويب، إلا أن أداءها والتحكم في الذاكرة يجعلها مثالية لإنشاء بوابات API والخدمات المصغرة وأنظمة الوقت الفعلي. سنوضح كيفية استخدام مكتبات C++ الحديثة للعمل مع HTTP و JSON والتشفير، لبناء نظام تفويض موثوق.



أساسيات OAuth 2.0

OAuth 2.0 هو بروتوكول تفويض يسمح للتطبيقات بالحصول على وصول محدود إلى موارد المستخدم دون نقل بيانات اعتماده. الأدوار الرئيسية في OAuth 2.0:

  • Resource Owner — المستخدم المالك للموارد
  • Client — التطبيق الذي يطلب الوصول
  • Authorization Server — الخادم الذي يصدر الرموز المميزة (tokens)
  • Resource Server — الخادم الذي يوفر الموارد المحمية

التدفقات الرئيسية (grant types) لـ OAuth 2.0:

  • Authorization Code — لتطبيقات الخادم
  • Client Credentials — للمصادقة بين الخدمات
  • Implicit — قديم، لتطبيقات الصفحة الواحدة (SPA)
  • Resource Owner Password Credentials — للعملاء الموثوقين


تنفيذ عميل OAuth 2.0 باستخدام C++

للعمل مع HTTP في C++، سنستخدم مكتبة cpp-httplib. لننظر في مثال للحصول على access token من خلال تدفق Client Credentials:

#include <httplib.h>#include <nlohmann/json.hpp>#include <iostream>

using json = nlohmann::json;

std::string get_access_token(const std::string& client_id, const std::string& client_secret, const std::string& token_url) { httplib::Client cli(token_url); // تشكيل جسم الطلب std::string body = "grant_type=client_credentials&" "client_id=" + client_id + "&" "client_secret=" + client_secret; auto res = cli.Post("/token", body, "application/x-www-form-urlencoded"); if (res && res->status == 200) { json response = json::parse(res->body); return response["access_token"]; } throw std::runtime_error("Failed to get access token");}


JWT (JSON Web Tokens)

JWT هي طريقة مدمجة ومكتفية ذاتيًا لنقل المعلومات بين الأطراف على شكل كائن JSON. يتكون الرمز المميز من ثلاثة أجزاء:

  • Header — يحتوي على نوع الرمز المميز وخوارزمية التوقيع
  • Payload — يحتوي على claims (ادعاءات) حول المستخدم
  • Signature — توقيع للتحقق


توليد JWT باستخدام C++

للعمل مع JWT والتشفير في C++، نستخدم المكتبات jwt-cpp و OpenSSL. مثال على توليد JWT باستخدام خوارزمية HS256:

#include <jwt-cpp/jwt.h>#include <chrono>

std::string create_jwt(const std::string& user_id, const std::string& secret_key) { auto now = std::chrono::system_clock::now(); auto exp = now + std::chrono::hours(1); auto token = jwt::create() .set_type("JWT") .set_issuer("auth.example.com") .set_subject(user_id) .set_issued_at(now) .set_expires_at(exp) .set_payload_c

المدونات

توصيات الكتب