OAuth 2.0 और C++ पर JWT प्राधिकरण: व्यवहार में
\n\nआधुनिक वेब एप्लिकेशन और माइक्रोसर्विसेज शायद ही कभी प्राधिकरण प्रणालियों के बिना काम करते हैं। दो सबसे लोकप्रिय मानक - पहुँच प्रत्यायोजन के लिए OAuth 2.0 और डेटा के कॉम्पैक्ट ट्रांसमिशन के लिए JWT (JSON Web Token) - उद्योग का वास्तविक मानक बन गए हैं। इस लेख में, हम चर्चा करेंगे कि C++ पर OAuth 2.0 क्लाइंट और JWT के साथ काम कैसे कार्यान्वित करें। आपको तैयार कोड उदाहरण मिलेंगे और समझ में आएगा कि इन तंत्रों को अपने प्रोजेक्ट में कैसे एकीकृत करें।
\n\nOAuth 2.0 और JWT क्या है: संक्षिप्त अवलोकन
\n\nOAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो एप्लिकेशन को उपयोगकर्ता के लॉगिन और पासवर्ड को स्थानांतरित किए बिना उसके संसाधनों तक सीमित पहुँच प्राप्त करने की अनुमति देता है। मुख्य भागीदार: Resource Owner (उपयोगकर्ता), Client (हमारा एप्लिकेशन), Authorization Server (टोकन जारी करने वाला सर्वर) और Resource Server (डेटा प्रदान करने वाला सर्वर)।
\n\nJWT एक टोकन प्रारूप है जिसमें तीन भाग होते हैं: Header (हस्ताक्षर एल्गोरिदम), Payload (डेटा, जैसे उपयोगकर्ता ID या भूमिका) और Signature (हस्ताक्षर, जो जालसाजी से बचाता है)। JWT का उपयोग अक्सर OAuth 2.0 में Bearer-टोकन के रूप में किया जाता है।
\n\nC++ पर हम लाइब्रेरीज़ cpprestsdk (HTTP अनुरोधों के लिए) और jwt-cpp (JWT के साथ काम करने के लिए) का उपयोग करेंगे। इन्हें vcpkg के माध्यम से स्थापित करें:
vcpkg install cpprestsdk\nvcpkg install jwt-cpp\n\nC++ पर OAuth 2.0 क्लाइंट का कार्यान्वयन
\n\nएक सामान्य परिदृश्य पर विचार करें: हमारे C++ एप्लिकेशन को Google OAuth 2.0 के माध्यम से प्रमाणित होना चाहिए। इसके लिए हमें: Google Cloud Console में एप्लिकेशन पंजीकृत करना, Client ID और Client Secret प्राप्त करना, और फिर Authorization Code Flow निष्पादित करना होगा।
\n\nचरण 1: प्राधिकरण के लिए URL बनाना
\n\nपहला कदम उपयोगकर्ता को Google प्राधिकरण पृष्ठ पर पुनर्निर्देशित करना है। आवश्यक पैरामीटर के साथ URL बनाएँ:
\n\n#include <string>\n#include <cpprest/http_client.h>\n#include <cpprest/uri_builder.h>\n\nusing namespace web;\nusing namespace web::http;\nusing namespace web::http::client;\n\nstd::string BuildAuthorizationUrl(const std::string& client_id,\n const std::string& redirect_uri,\n const std::string& state) {\n uri_builder builder(U("https://accounts.google.com/o/oauth2/v2/auth"));\n builder.append_query(U("client_id"), utility::conversions::to_string_t(client_id));\n builder.append_query(U("redirect_uri"), utility::conversions::to_string_t(redirect_uri));\n builder.append_query(U("response_type"), U("code"));\n builder.append_query(U("scope"), U("openid%20email%20profile"));\n builder.append_query(U("state"), utility::conversions::to_string_t(state));\n builder.append_query(U("access_type"), U("offline"));\n builder.append_query(U("prompt"), U("consent"));\n return utility::conversions::to_utf8string(builder.to_uri().to_string());\n}\n\nचरण 2: कोड को टोकन से बदलना
\n\nउपयोगकर्ता द्वारा पहुँच की पुष्टि करने के बाद, Google उसे code पैरामीटर के साथ हमारे redirect_uri पर पुनर्निर्देशित करेगा। इस कोड को access_token और refresh_token में बदलना होगा:
pplx::task<web::json::value> ExchangeCodeForToken(\n const std::string& client_id,\n const std::string& client_secret,\n const std::string& redirect_uri,\n const std::string& code) {\n \n http_client client(U("https://oauth2.googleapis.com/token"));\n \n web::json::value body;\n body[U("code")] = web::json::value::string(utility::conversions::to_string_t(code));\n body[U("client_id")] = web::json::value::string(utility::conversions::to_string_t(client_id));\n body[U("client_secret")] = web::json::value::string(utility::conversions::to_string_t(client_secret));\n body[U("redirect_uri")] = web::json::va