C++ में JWT टोकन: jwt-cpp लाइब्रेरी से कार्यान्वयन और सत्यापन

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

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

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

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

JSON Web Token (JWT) एक कॉम्पैक्ट और स्व-निहित तरीका है जिससे JSON ऑब्जेक्ट के रूप में दो पक्षों के बीच जानकारी ट्रांसफर की जाती है। C++ में JWT के साथ काम करने के लिए कई लाइब्रेरी हैं, लेकिन सबसे लोकप्रिय और सुविधाजनक में से एक jwt-cpp है। यह विभिन्न एल्गोरिदम (HMAC, RSA, ECDSA) का उपयोग करके JWT टोकन बनाने, साइन करने और सत्यापित करने के लिए एक सरल API प्रदान करता है।

इस लेख में हम jwt-cpp लाइब्रेरी की मुख्य क्षमताओं को देखेंगे, टोकन बनाना और जांचना सीखेंगे, और सामान्य कार्यों के लिए कोड उदाहरण समझेंगे।

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

jwt-cpp लाइब्रेरी header-only है, जिससे इसे प्रोजेक्ट में शामिल करना आसान है। इसे इंस्टॉल करने के लिए रिपॉजिटरी को क्लोन करें:

git clone https://github.com/Thalhammer/jwt-cpp.git

फिर अपने कंपाइलर सेटिंग्स में include फ़ोल्डर का पथ जोड़ें। अगर आप CMake का उपयोग कर रहे हैं, तो कनेक्शन इस तरह दिखेगा:

add_subdirectory(jwt-cpp)
target_link_libraries(your_project jwt-cpp)

यह लाइब्रेरी OpenSSL और jsoncpp (या nlohmann/json) पर निर्भर करती है, इसलिए सुनिश्चित करें कि वे इंस्टॉल हैं।

JWT टोकन का बुनियादी निर्माण

सबसे सरल उदाहरण — HMAC-SHA256 एल्गोरिदम का उपयोग करके टोकन बनाना। टोकन में मानक फ़ील्ड (iss, sub, exp, iat) और कस्टम claims जोड़े जा सकते हैं।

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

int main() {
    // टोकन बनाएँ
    auto token = jwt::create()
        .set_issuer("auth0")
        .set_subject("1234567890")
        .set_issued_at(std::chrono::system_clock::now())
        .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{1})
        .set_payload_claim("name", jwt::claim(std::string("John Doe")))
        .sign(jwt::algorithm::hs256{"secret-key"});

    std::cout << "टोकन: " << token << std::endl;
    return 0;
}

परिणामस्वरूप तीन भागों (header, payload, signature) वाली एक स्ट्रिंग मिलेगी, जो डॉट्स से अलग होती है।

टोकन का सत्यापन

टोकन की प्रामाणिकता जांचने के लिए उसी गुप्त कुंजी (या RSA के लिए सार्वजनिक कुंजी) का उपयोग करना आवश्यक है। सत्यापन का उदाहरण:

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

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

    try {
        auto decoded = jwt::decode(token);
        
        // सिग्नेचर जांचें
        auto verifier = jwt::verify()
            .allow_algorithm(jwt::algorithm::hs256{"secret-key"})
            .with_issuer("auth0");

        verifier.verify(decoded);

        // डेटा निकालें
        std::cout << "टोकन वैध है!" << std::endl;
        std::cout << "Subject: " << decoded.get_subject() << std::endl;
        std::cout << "Name: " << decoded.get_payload_claim("name").as_string() << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "सत्यापन त्रुटि: " << e.what() << std::endl;
    }

    return 0;
}

महत्वपूर्ण: अगर टोकन की समय सीमा समाप्त (exp) हो गई है, इसे बदल दिया गया है, या किसी दूसरी कुंजी से साइन किया गया है, तो एक अपवाद (exception) फेंका जाएगा।

RSA के साथ काम करना (असममित एन्क्रिप्शन)

अधिक सुरक्षित सिस्टम के लिए अक्सर RSA का उपयोग किया जाता है। इस मामले में, टोकन को प्राइवेट कुंजी से साइन किया जाता है और पब्लिक कुंजी से जांचा जाता है।

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

int main() {
    // फ़ाइल से प्राइवेट कुंजी पढ़ें
    std::ifstream priv_file("private.pem");
    std::stringstream priv_ss;
    priv_ss << priv_file.rdbuf();
    std::string private_key = priv_ss.str();

    // RSA के साथ टोकन बनाएँ
    auto token = jwt::create()
        .set_issuer("myapp")
        .set_subject("user123")
        .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{2})
        .                    

अनुशंसाएँ