Rust में OAuth 2.0 और JWT प्राधिकरण: शुरुआती लोगों के लिए चरण-दर-चरण मार्गदर्शिका

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

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

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

परिचय: Rust में प्राधिकरण की आवश्यकता क्यों है?

\n

आधुनिक वेब एप्लिकेशन शायद ही कभी प्रमाणीकरण और प्राधिकरण प्रणाली के बिना काम करते हैं। Rust, अपने प्रदर्शन और मेमोरी सुरक्षा के कारण, उच्च-लोड सेवाओं के निर्माण के लिए एक लोकप्रिय विकल्प बन रहा है। हालांकि, OAuth 2.0 जैसे प्रोटोकॉल और JWT प्रारूप के साथ काम करना शुरुआती लोगों के लिए जटिल लग सकता है।

\n

इस लेख में, हम OAuth 2.0 और JWT (JSON Web Token) की बुनियादी अवधारणाओं को समझेंगे और लोकप्रिय क्रेट्स का उपयोग करके Rust में एक सरल प्राधिकरण प्रणाली लागू करेंगे। आप सीखेंगे कि अपने API एंडपॉइंट्स को कैसे सुरक्षित करें और एक्सेस टोकन के साथ कैसे काम करें।

\n\n

OAuth 2.0 और JWT क्या हैं?

\n

कोड लिखने से पहले, सिद्धांत को समझना महत्वपूर्ण है।

\n\n

OAuth 2.0: प्रतिनिधि पहुंच प्रोटोकॉल

\n

OAuth 2.0 एक प्रोटोकॉल है जो किसी एप्लिकेशन को उपयोगकर्ता के लॉगिन और पासवर्ड को स्थानांतरित किए बिना उसके संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। कल्पना करें कि आप Google या GitHub के माध्यम से किसी साइट पर लॉग इन करना चाहते हैं - यही OAuth 2.0 है।

\n

प्रोटोकॉल के मुख्य भागीदार:

\n
    \n
  • Resource Owner — उपयोगकर्ता, जो डेटा का मालिक है।
  • \n
  • Client — आपका Rust एप्लिकेशन, जो पहुंच प्राप्त करना चाहता है।
  • \n
  • Authorization Server — सर्वर जो टोकन जारी करता है (जैसे, Google)।
  • \n
  • Resource Server — API, जो डेटा प्रदान करता है (जैसे, Google Drive)।
  • \n
\n\n

JWT: टोकन का कॉम्पैक्ट प्रारूप

\n

JWT (JSON Web Token) एक्सेस टोकन बनाने के लिए एक खुला मानक है। टोकन में तीन भाग होते हैं, जो बिंदुओं से अलग होते हैं:

\n
    \n
  • Header — टोकन का प्रकार और हस्ताक्षर एल्गोरिदम।
  • \n
  • Payload — डेटा (claims), जैसे, उपयोगकर्ता ID या भूमिका।
  • \n
  • Signature — हस्ताक्षर, जो गारंटी देता है कि टोकन बदला नहीं गया है।
  • \n
\n

JWT का उदाहरण: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNrxP0G7n9G4W7N8Y7J8

\n

JWT सुविधाजनक है क्योंकि इसे सर्वर पर सत्र संग्रहीत करने की आवश्यकता नहीं है - सभी जानकारी पहले से ही टोकन में एन्कोडेड है।

\n\n

प्राधिकरण के लिए Rust प्रोजेक्ट सेटअप

\n

हम Actix Web फ्रेमवर्क और कई सहायक क्रेट्स का उपयोग करेंगे। एक नया प्रोजेक्ट बनाएं:

\n
cargo new rust-auth-example\ncd rust-auth-example
\n\n

Cargo.toml में निर्भरताएँ जोड़ें:

\n
[dependencies]\nactix-web = "4"\nactix-rt = "2"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\njsonwebtoken = "9"\nchrono = { version = "0.4", features = ["serde"] }\ndotenv = "0.15"\nenv_logger = "0.10"\nbcrypt = "0.15"
\n\n

फ़ाइल संरचना

\n

सुविधा के लिए, हम एक मॉड्यूलर संरचना बनाएंगे:

\n
src/\n├── main.rs\n├── auth.rs\n├── models.rs\n└── handlers.rs
\n\n

.env में JWT के लिए गुप्त कुंजी लिखें:

\n
JWT_SECRET=supersecretkey12345\nDATABASE_URL=sqlite://users.db
\n\n

Rust में JWT का कार्यान्वयन: जनरेशन से सत्यापन तक

\n

चलिए auth.rs मॉड्यूल से शुरू करते हैं, जो JWT के साथ काम करने के लिए जिम्मेदार होगा।

\n\n

JWT के लिए संरचनाएँ

\n
// auth.rs\nuse serde::{Deserialize, Serialize};\nuse jsonwebtoken::{encode, decode, Header, Validation, EncodingKey, DecodingKey};\nuse chrono::{Utc, Duration};\n\n#[derive(Debug, Serialize, Deserialize)]\npub struct Claims {\n    pub sub: String,       // उपयोगकर्ता ID\n    pub exp: usize,        // समाप्ति समय\n    pub iat: usize,        // जारी करने का समय\n}\n\npub fn create_jwt(user_id: &str, secret: &str) -> Result<String, jsonwebtoken::errors::Error> {\n    let now = Utc::now();\n    let expiration = now + Duration::hours(24); // टोकन 24 घंटे तक रहता है\n\n    let claims = Claims {\n        sub: user_id.to_owned(),\n        exp: expiration.timestamp() as usize,\n        iat: now.timestamp() as usize,\n    };\n\n    let token = encode(\n        &Header::default(),\n        &claims,\                

ब्लॉग

पुस्तक अनुशंसाएँ