C++ में JWT टोकन: प्रमाणीकरण के लिए jwt-cpp लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में JWT टोकन: jwt-cpp लाइब्रेरी



JSON Web Token (JWT) JSON पर आधारित एक्सेस टोकन बनाने के लिए एक खुला मानक (RFC 7519) है। C++ में JWT के साथ काम करने के लिए jwt-cpp लाइब्रेरी (लेखक Thalhammer) का व्यापक रूप से उपयोग किया जाता है। यह विभिन्न हस्ताक्षर एल्गोरिदम (HS256, RS256, आदि) के समर्थन के साथ JWT टोकन बनाने, सत्यापित करने और डिकोड करने के लिए एक सुविधाजनक API प्रदान करती है।



लाइब्रेरी आधुनिक C++17 में लिखी गई है, इसे बाहरी निर्भरता की आवश्यकता नहीं है (असममित एल्गोरिदम के लिए OpenSSL को छोड़कर) और समुदाय द्वारा सक्रिय रूप से समर्थित है।



jwt-cpp की स्थापना



स्थापना का सबसे आसान तरीका vcpkg या Conan पैकेज मैनेजर के माध्यम से है:



// vcpkg के माध्यम सेvcpkg install jwt-cpp

// Conan के माध्यम सेconan install jwt-cpp/0.7.0@

// या प्रोजेक्ट में हेडर फ़ाइल कॉपी करेंgit clone https://github.com/Thalhammer/jwt-cpp.git


CMake के साथ संकलन के लिए, बस निर्दिष्ट करें:



find_package(jwt-cpp REQUIRED)target_link_libraries(myapp jwt-cpp::jwt-cpp)


मुख्य विशेषताएं



  • टोकन बनाना मनमाने claims (sub, iss, exp, custom) के साथ।
  • हस्ताक्षर सत्यापन और जीवनकाल जांच (exp, nbf)।
  • डिकोडिंग बिना सत्यापन के payload (डिबगिंग के लिए)।
  • एल्गोरिदम समर्थन: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512।
  • कस्टम वैलिडेटर — किसी भी फ़ील्ड की जांच जोड़ी जा सकती है।


उदाहरण 1: JWT टोकन बनाना (HS256)



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

int main() { // HS256 एल्गोरिदम के साथ टोकन बनाएं auto token = jwt::create() .set_type("JWT") .set_issuer("auth.pythonlib.ru") .set_subject("user123") .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{1}) .set_payload_claim("role", jwt::claim(std::string("admin"))) .sign(jwt::algorithm::hs256{"secret_key_12345"});

std::cout << "बनाया गया टोकन:" << token << std::endl; return 0;}


इस उदाहरण में हमने टोकन बनाया है जिसमें:

  • प्रकार JWT,
  • जारीकर्ता auth.pythonlib.ru,
  • विषय user123,
  • समाप्ति समय 1 घंटा,
  • मान admin के साथ कस्टम फ़ील्ड role।


उदाहरण 2: सत्यापन और डिकोडिंग



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

int main() { std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // आपका टोकन

try { // हस्ताक्षर जांच के बिना डिकोड करें (केवल payload पढ़ने के लिए) auto decoded = jwt::decode(token); std::cout << "जारीकर्ता: " << decoded.get_issuer() << std::endl; std::cout << "विषय: " << decoded.get_subject() << std::endl;

// हस्ताक्षर और जीवनकाल जांचें auto verifier = jwt::verify() .allow_algorithm(jwt::algorithm::hs256{"secret_key_12345"}) .with_issuer("auth.pythonlib.ru");

verifier.verify(decoded); std::cout << "टोकन मान्य है!" << std::endl;

} catch (const jwt::TokenExpiredError& e) { std::cerr << "त्रुटि: टोकन समाप्त हो गया" << std::endl; } catch (const jwt::InvalidAlgorithmError& e) { std::cerr << "त्रुटि: गलत एल्गोरिदम" << std::endl; } catch (const std::exception& e) { std::cerr << "सत्यापन त्रुटि: " << e.what() << std::endl; }

return 0;}


उदाहरण 3: असममित कुंजियों के साथ काम करना (RS256)



#include <jwt-cpp/jwt.h>#include <fstream>#include <sstream>

std::string read_file(const std::string& path) {

अनुशंसाएँ