C++ में OAuth 2.0 और JWT का परिचय
\n\nआधुनिक वेब एप्लिकेशन और API शायद ही कभी प्राधिकरण प्रणालियों के बिना काम करते हैं। दो सबसे लोकप्रिय मानक — OAuth 2.0 और JWT (JSON Web Token) — लाखों सेवाओं की सुरक्षा की नींव बन गए हैं। इस लेख में, हम C++ भाषा में JWT टोकन के साथ बुनियादी OAuth 2.0 प्राधिकरण को लागू करने का तरीका समझेंगे। आप जानेंगे कि ये प्रोटोकॉल कैसे काम करते हैं, और तैयार कोड उदाहरण देखेंगे जिन्हें आप अपने प्रोजेक्ट के अनुसार अनुकूलित कर सकते हैं।
\n\nयह लेख उन शुरुआती डेवलपर्स के लिए है जो पहले से C++ की मूल बातें (क्लास, फंक्शन, नेटवर्किंग) जानते हैं और अपने एप्लिकेशन में सुरक्षित प्राधिकरण जोड़ना चाहते हैं। हम HTTP-सर्वर के लिए किसी तीसरे पक्ष की लाइब्रेरी का उपयोग नहीं करेंगे — सभी उदाहरण न्यूनतम निर्भरता के साथ शुद्ध C++ में होंगे।
\n\nOAuth 2.0 क्या है और इसकी आवश्यकता क्यों है?
\n\nOAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो एप्लिकेशन को उपयोगकर्ता का पासवर्ड दिए बिना उसके संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। कल्पना करें कि आप किसी एप्लिकेशन को अपने सर्वर पर फ़ोटो तक पहुंच देना चाहते हैं। लॉगिन और पासवर्ड दर्ज करने के बजाय, आप Authorization Server से गुज़रते हैं, जो एक अस्थायी टोकन जारी करता है। एप्लिकेशन संसाधनों तक पहुंचने के लिए इस टोकन का उपयोग करता है।
\n\nOAuth 2.0 में मुख्य भूमिकाएँ:
\n- \n
- Resource Owner — उपयोगकर्ता, डेटा का मालिक। \n
- Client — एप्लिकेशन जो पहुंच का अनुरोध करता है। \n
- Authorization Server — सर्वर जो प्रमाणीकरण के बाद टोकन जारी करता है। \n
- Resource Server — सर्वर जो संरक्षित डेटा (जैसे API) संग्रहीत करता है। \n
C++ में, हम JWT को एक्सेस टोकन के रूप में उपयोग करते हुए Authorization Server और Resource Server का एक सरलीकृत संस्करण लागू करेंगे।
\n\nJWT: संरचना और कार्य सिद्धांत
\n\nJWT (JSON Web Token) पक्षों के बीच JSON ऑब्जेक्ट के रूप में जानकारी स्थानांतरित करने का एक कॉम्पैक्ट और स्व-निहित तरीका है। टोकन में तीन भाग होते हैं, जो बिंदुओं द्वारा अलग किए जाते हैं:
\n\nheader.payload.signature\n\nHeader में टोकन का प्रकार और हस्ताक्षर एल्गोरिदम (आमतौर पर HMAC SHA256 या RSA) होता है। Payload पेलोड है: उपयोगकर्ता आईडी, टोकन की आयु, भूमिकाएँ आदि। Signature एक हस्ताक्षर है जो डेटा की अखंडता की जाँच करता है।
\n\nबिना लाइब्रेरी के C++ में JWT बनाने का उदाहरण (सरलीकृत):
\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यह कोड HS256 हेडर और पेलोड के साथ एक JWT बनाता है। वास्तविक प्रोजेक्ट्स में, jwt-cpp या libjwt जैसी सिद्ध लाइब्रेरी का उपयोग करें, लेकिन मूल समझने के लिए यह पर्याप्त है।