C++ में cpp-httplib के साथ OAuth 2.0 क्लाइंट
आधुनिक सॉफ्टवेयर डेवलपमेंट में, OAuth 2.0 के माध्यम से बाहरी सेवाओं के साथ एकीकरण एक मानक बन गया है। C++ भाषा के लिए, जो पारंपरिक रूप से सिस्टम प्रोग्रामिंग से जुड़ी है, OAuth क्लाइंट को लागू करने के कई तरीके हैं। सबसे हल्के और प्रभावी समाधानों में से एक cpp-httplib लाइब्रेरी है — एक सिंगल-हेडर HTTP/HTTPS लाइब्रेरी जो बिना किसी बाहरी निर्भरता के सर्वर और क्लाइंट दोनों एप्लिकेशन बनाने की अनुमति देती है।
इस लेख में, हम देखेंगे कि cpp-httplib का उपयोग करके एक पूर्ण OAuth 2.0 क्लाइंट कैसे बनाया जाए, जो Google, GitHub, VK और अन्य प्रदाताओं के माध्यम से प्रमाणित हो सके। यह सामग्री उन C++ प्रोग्रामरों के लिए है जो डेस्कटॉप या एम्बेडेड एप्लिकेशन में प्रमाणीकरण जोड़ना चाहते हैं।
cpp-httplib क्या है?
cpp-httplib (जिसे httplib.h के नाम से भी जाना जाता है) Yuji Hirose द्वारा लिखित C++11/14/17 के लिए एक header-only लाइब्रेरी है। यह HTTP अनुरोध करने और HTTP सर्वर बनाने के लिए एक सरल और सहज API प्रदान करती है। यह SSL/TLS (OpenSSL या MbedTLS के माध्यम से), प्रॉक्सी, कुकीज़ और एसिंक्रोनस अनुरोधों का समर्थन करती है।
- Header-only — बस एक फ़ाइल को प्रोजेक्ट में कॉपी करें।
- HTTPS समर्थन — OAuth के लिए सुरक्षित कनेक्शन।
- छोटा आकार — लगभग 8000 लाइनों का कोड।
- क्रॉस-प्लेटफ़ॉर्म — Windows, Linux, macOS, BSD।
OAuth 2.0 के लिए, हमें प्रदाता के एंडपॉइंट पर GET और POST अनुरोध करने और रीडायरेक्ट को संभालने की आवश्यकता होगी। cpp-httplib इसे बखूबी संभालता है।
C++ में OAuth 2.0 क्लाइंट की आर्किटेक्चर
एक सामान्य OAuth 2.0 Authorization Code Flow में निम्नलिखित चरण शामिल हैं:
- एप्लिकेशन उपयोगकर्ता के ब्राउज़र को प्राधिकरण URL के साथ खोलता है।
- उपयोगकर्ता पहुंच की पुष्टि करता है।
- प्रदाता एक अस्थायी कोड के साथ callback URL पर रीडायरेक्ट करता है।
- एप्लिकेशन कोड को access token से बदलता है।
- टोकन का उपयोग करके API अनुरोध किए जाते हैं।
C++ में, हम callback को इंटरसेप्ट करने के लिए एक स्थानीय HTTP सर्वर (cpp-httplib पर) चलाकर इसे लागू कर सकते हैं। वैकल्पिक रूप से, हम बिल्ट-इन ब्राउज़र का उपयोग कर सकते हैं और सिस्टम इवेंट के माध्यम से URL को ट्रैक कर सकते हैं, लेकिन सर्वर दृष्टिकोण सरल है।
कार्यान्वयन उदाहरण: GitHub के माध्यम से OAuth
आइए एक पूर्ण क्लाइंट उदाहरण देखें जो GitHub OAuth के माध्यम से प्रमाणित होता है। इसके लिए, GitHub पर एक OAuth App रजिस्टर करना और Client ID और Client Secret प्राप्त करना आवश्यक है।
#include <httplib.h>
#include <iostream>
#include <string>
#include <thread>
#include <regex>
// कॉन्फ़िगरेशन
const std::string CLIENT_ID = "आपका_client_id";
const std::string CLIENT_SECRET = "आपका_client_secret";
const std::string REDIRECT_URI = "http://localhost:8080/callback";
const std::string AUTH_URL = "https://github.com/login/oauth/authorize";
const std::string TOKEN_URL = "https://github.com/login/oauth/access_token";
const std::string API_URL = "https://api.github.com/user";
std::string auth_code;
void start_local_server() {
httplib::Server svr;
svr.Get("/callback", [&](const httplib::Request& req, httplib::Response& res) {
// query पैरामीटर से कोड निकालें
if (req.has_param("code")) {
auth_code = req.get_param_value("code");
res.set_content("<h2>प्रमाणीकरण सफल! विंडो बंद करें।</h2>", "text/html");
svr.stop();
} else {
res.set_content("<h2>प्रमाणीकरण त्रुटि</h2>", "text/html");
}
});
std::cout << "सर्वर पोर्ट 8080 पर शुरू हुआ..." << std::endl;
svr.listen("0.0.0.0", 8080);
}
int main() {
// चरण 1: प्राधिकरण URL बनाएं
std::string auth_url = AUTH_URL + "?client_id=" + CLIENT_ID
+ "&redirect_uri=" + RE