OAuth 2.0 وتفويض JWT بلغة C++: دليل خطوة بخطوة للمبتدئين

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

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

ابدأ الدورة

مقدمة في OAuth 2.0 و JWT بلغة C++

\n\n

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

\n\n

المقالة موجهة للمطورين المبتدئين الذين هم على دراية بأساسيات C++ (الفئات، الدوال، العمل مع الشبكة) ويريدون إضافة تفويض آمن إلى تطبيقاتهم. لن نستخدم مكتبات خارجية لخادم HTTP — جميع الأمثلة ستكون بلغة C++ خالصة مع أقل عدد من التبعيات.

\n\n

ما هو OAuth 2.0 ولماذا هو مطلوب؟

\n\n

OAuth 2.0 هو بروتوكول تفويض يسمح للتطبيقات بالحصول على وصول محدود إلى موارد المستخدم دون نقل كلمة المرور الخاصة به. تخيل أنك تريد منح تطبيق حق الوصول إلى صورك على الخادم. بدلاً من إدخال اسم المستخدم وكلمة المرور، تمر عبر خادم التفويض (Authorization Server) الذي يصدر رمزًا مؤقتًا. يستخدم التطبيق هذا الرمز للوصول إلى الموارد.

\n\n

الأدوار الرئيسية في OAuth 2.0:

\n
    \n
  • مالك المورد (Resource Owner) — المستخدم، مالك البيانات.
  • \n
  • العميل (Client) — التطبيق الذي يطلب الوصول.
  • \n
  • خادم التفويض (Authorization Server) — الخادم الذي يصدر الرموز بعد المصادقة.
  • \n
  • خادم الموارد (Resource Server) — الخادم الذي يخزن البيانات المحمية (مثل API).
  • \n
\n\n

بلغة C++، سنقوم بتنفيذ نسخة مبسطة من خادم التفويض وخادم الموارد، باستخدام JWT كرمز وصول.

\n\n

JWT: الهيكل ومبدأ العمل

\n\n

JWT (JSON Web Token) هي طريقة مضغوطة ومكتفية ذاتيًا لنقل المعلومات بين الأطراف على شكل كائن JSON. يتكون الرمز من ثلاثة أجزاء مفصولة بنقاط:

\n\n
header.payload.signature
\n\n

الرأس (Header) يحتوي على نوع الرمز وخوارزمية التوقيع (عادةً HMAC SHA256 أو RSA). الحمولة (Payload) هي البيانات المفيدة: معرف المستخدم، وقت صلاحية الرمز، الأدوار، إلخ. التوقيع (Signature) هو توقيع يتحقق من سلامة البيانات.

\n\n

مثال على إنشاء JWT بلغة C++ بدون مكتبات (مبسط):

\n\n
#include <iostream>\n#include <sstream>\n#include <vector>\n#include <openssl/sha.h>\n#include <openssl/hmac.h>\n\nstd::string base64_encode(const std::string &input) {\n    // تنفيذ مبسط لـ Base64 (للتوضيح)\n    static const char* lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\n    std::string result;\n    // ... كود الترميز ...\n    return result;\n}\n\nstd::string create_jwt(const std::string &payload, const std::string &secret) {\n    std::string header = R"({"alg":"HS256","typ":"JWT"})";\n    std::string header_b64 = base64_encode(header);\n    std::string payload_b64 = base64_encode(payload);\n    std::string data = header_b64 + "." + payload_b64;\n    \n    unsigned char* sig = HMAC(EVP_sha256(), secret.c_str(), secret.length(), \n                              (unsigned char*)data.c_str(), data.length(), NULL, NULL);\n    std::string sig_b64 = base64_encode(std::string((char*)sig, 32));\n    \n    return data + "." + sig_b64;\n}\n\nint main() {\n    std::string payload = R"({"user_id":123,"role":"admin","exp":1700000000})";\n    std::string token = create_jwt(payload, "my_secret_key");\n    std::cout << "JWT: " << token << std::endl;\n    return 0;\n}
\n\n

هذا الكود ينشئ JWT برأس HS256 وحمولة. في المشاريع الحقيقية، استخدم مكتبات موثوقة مثل jwt-cpp أو libjwt، ولكن لفهم الجوهر، فهذا الكود مناسب أيضًا.

المدونات

توصيات الكتب