المصادقة والتحقق من الهوية في C++: المكتبات والأمثلة والتطبيق

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

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

ابدأ الدورة

المكتبات والأدوات للمصادقة والتحقق من الهوية في C++



في تطوير البرمجيات الحديثة باستخدام C++، تُعد أمان بيانات المستخدم والتحكم في الوصول من المهام الحيوية. في هذه المقالة، سنستعرض المكتبات والمناهج الرئيسية لتنفيذ المصادقة والتحقق من الهوية في C++، بما في ذلك تجزئة كلمات المرور، والعمل مع رموز JWT، ودعم بروتوكول OAuth2.



1. تجزئة كلمات المرور: مكتبة bcrypt (غلاف C++)



لتخزين كلمات المرور بشكل آمن في C++، يُوصى باستخدام تكييف خوارزمية bcrypt. التنفيذ الأكثر شيوعًا هو libbcrypt (غلاف C++) أو استخدام OpenSSL مع واجهة bcrypt. مثال على تجزئة والتحقق من كلمة المرور:



#include <bcrypt.h>#include <iostream>

int main() { const char* password = "mySecret123"; const char* hash = bcrypt_generate_hash(password, 12); // 12 = عامل التكلفة

std::cout << "Hash: " << hash << std::endl;

bool match = bcrypt_check_password(password, hash); std::cout << "Password match: " << (match ? "true" : "false") << std::endl;

return 0;}


هام: يضيف bcrypt تلقائيًا الملح (salt) ويسمح بضبط التعقيد الحسابي (عامل التكلفة). لا تقم أبدًا بتخزين كلمات المرور كنص عادي.



2. العمل مع JWT (رموز JSON Web Tokens)



لتنفيذ التحقق من الهوية القائم على الرموز المميزة في C++، استخدم مكتبة jwt-cpp (أو libjwt). تدعم الخوارزميات HS256 و RS256 وغيرها. مثال على إنشاء والتحقق من JWT:



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

int main() { // إنشاء رمز مميز باستخدام HS256 auto token = jwt::create() .set_issuer("auth.pythonlib.ru") .set_type("JWT") .set_payload_claim("user_id", jwt::claim(std::string("12345"))) .sign(jwt::algorithm::hs256{"secret_key"});

std::cout << "Token: " << token << std::endl;

// التحقق auto decoded = jwt::decode(token); auto verifier = jwt::verify() .allow_algorithm(jwt::algorithm::hs256{"secret_key"}) .with_issuer("auth.pythonlib.ru");

try { verifier.verify(decoded); std::cout << "Token is valid!" << std::endl; std::cout << "User ID: " << decoded.get_payload_claim("user_id").as_string() << std::endl; } catch (const std::exception& e) { std::cerr << "Invalid token: " << e.what() << std::endl; }

return 0;}


3. التحقق من الهوية عبر OAuth2 باستخدام liboauth2



للتكامل مع المزودين الخارجيين (Google، GitHub، VK)، استخدم liboauth2 (C++). تدعم المكتبة تدفق رمز التفويض (Authorization Code Flow) وتدفق بيانات اعتماد العميل (Client Credentials Flow). مثال على الحصول على رمز الوصول:



#include <oauth2/client>#include <iostream>

int main() { oauth2::client client( "your_client_id", "your_client_secret", "https://provider.com/oauth2/token", "https://your-app.com/callback" );

// استبدال رمز التفويض برمز وصول auto token = client.fetch_access_token("authorization_code_here");

std::cout << "Access Token: " << token.access_token << std::endl; std::cout << "Expires in: " << token.expires_in << " seconds" << std::endl;

// التحقق من الرمز if (client.validate_token(token)) { std::cout << "Token is valid" << std::endl; }

return 0;}


4. الدعم التشفيري: OpenSSL



OpenSSL — مكتبة أساسية للعمل مع التجزئات (SHA-256، SHA-512)، والتشفير المتماثل وغير المتماثل. مثال على تجزئة كلمة المرور مع الملح:

توصيات