C++ पर OAuth 2.0 और JWT प्राधिकरण का परिचय
आधुनिक वेब डेवलपमेंट की दुनिया में, सुरक्षा और प्रमाणीकरण की सुविधा एक महत्वपूर्ण भूमिका निभाती है। OAuth 2.0 और JWT (JSON Web Tokens) वितरित सिस्टम में प्राधिकरण को लागू करने के लिए डी-फैक्टो मानक बन गए हैं। इस लेख में, हम देखेंगे कि C++ भाषा पर OAuth 2.0 और JWT प्राधिकरण कैसे लागू करें - एक शक्तिशाली और उच्च-प्रदर्शन वाली भाषा जिसका उपयोग अक्सर उच्च-लोड सर्वर एप्लिकेशन बनाने के लिए किया जाता है।
हालाँकि C++ वेब डेवलपमेंट के लिए एक विशिष्ट विकल्प नहीं है, लेकिन इसका प्रदर्शन और मेमोरी पर नियंत्रण इसे API गेटवे, माइक्रोसर्विसेज और रियल-टाइम सिस्टम बनाने के लिए आदर्श बनाता है। हम दिखाएंगे कि HTTP, JSON और क्रिप्टोग्राफी के साथ काम करने के लिए आधुनिक C++ लाइब्रेरीज़ का उपयोग कैसे करें, ताकि एक विश्वसनीय प्राधिकरण प्रणाली बनाई जा सके।
OAuth 2.0 की मूल बातें
OAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो एप्लिकेशन को उपयोगकर्ता की साख प्रदान किए बिना उसके संसाधनों तक सीमित पहुँच प्राप्त करने की अनुमति देता है। OAuth 2.0 में मुख्य भूमिकाएँ:
- Resource Owner — उपयोगकर्ता जो संसाधनों का मालिक है
- Client — एप्लिकेशन जो पहुँच का अनुरोध करता है
- Authorization Server — सर्वर जो टोकन जारी करता है
- Resource Server — सर्वर जो संरक्षित संसाधन प्रदान करता है
OAuth 2.0 के मुख्य प्रवाह (grant types):
- Authorization Code — सर्वर एप्लिकेशन के लिए
- Client Credentials — सेवा-से-सेवा प्रमाणीकरण के लिए
- Implicit — पुराना, SPA के लिए
- Resource Owner Password Credentials — विश्वसनीय क्लाइंट के लिए
C++ पर OAuth 2.0 क्लाइंट का कार्यान्वयन
C++ में HTTP के साथ काम करने के लिए हम cpp-httplib लाइब्रेरी का उपयोग करेंगे। Client Credentials प्रवाह के माध्यम से access token प्राप्त करने का एक उदाहरण देखें:
#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 — सत्यापन के लिए हस्ताक्षर
C++ पर JWT जनरेशन
C++ में JWT और क्रिप्टोग्राफी के साथ काम करने के लिए हम jwt-cpp और OpenSSL लाइब्रेरीज़ का उपयोग करते हैं। HS256 एल्गोरिदम के साथ JWT जनरेशन का उदाहरण:
#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