Rust में OAuth 2.0 और JWT प्राधिकरण: चरण-दर-चरण मार्गदर्शिका

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

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

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

परिचय: Rust में OAuth 2.0 और JWT की आवश्यकता क्यों?

\n\n

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

\n\n

1. प्रोजेक्ट तैयार करना और निर्भरताएँ स्थापित करना

\n\n

शुरू करने के लिए, हम Rust में एक नया प्रोजेक्ट बनाएंगे और आवश्यक निर्भरताएँ जोड़ेंगे। हम वेब सर्वर के लिए actix-web, JWT के साथ काम करने के लिए jsonwebtoken, सीरियलाइज़ेशन के लिए serde, और बाहरी OAuth प्रदाताओं के लिए HTTP अनुरोधों के लिए reqwest का उपयोग करेंगे।

\n\n
# Cargo.toml\n[package]\nname = "oauth-jwt-rust"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nactix-web = "4"\nactix-rt = "2"\njsonwebtoken = "9"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\ndotenv = "0.15"\nchrono = { version = "0.4", features = ["serde"] }\nuuid = { version = "1", features = ["v4"] }
\n\n

गुप्त कुंजियों को संग्रहीत करने के लिए एक .env फ़ाइल बनाएँ:

\n\n
JWT_SECRET=your_super_secret_key_here\nGITHUB_CLIENT_ID=your_github_client_id\nGITHUB_CLIENT_SECRET=your_github_client_secret
\n\n

2. JWT टोकन की मूल संरचना

\n\n

JWT तीन भागों से बना होता है: हेडर, पेलोड और हस्ताक्षर। टोकन के साथ काम करने के लिए संरचनाएँ परिभाषित करें।

\n\n
// src/jwt.rs\nuse chrono::{Utc, Duration};\nuse jsonwebtoken::{encode, decode, Header, Validation, EncodingKey, DecodingKey};\nuse serde::{Deserialize, Serialize};\n\n#[derive(Debug, Serialize, Deserialize)]\npub struct Claims {\n    pub sub: String,       // उपयोगकर्ता आईडी\n    pub email: String,     // उपयोगकर्ता का ईमेल\n    pub exp: usize,        // समाप्ति समय\n    pub iat: usize,        // जारी करने का समय\n}\n\npub fn create_jwt(user_id: &str, email: &str) -> Result {\n    let now = Utc::now();\n    let expiration = now + Duration::hours(24); // टोकन 24 घंटे तक वैध रहता है\n\n    let claims = Claims {\n        sub: user_id.to_string(),\n        email: email.to_string(),\n        exp: expiration.timestamp() as usize,\n        iat: now.timestamp() as usize,\n    };\n\n    let secret = std::env::var("JWT_SECRET").expect("JWT_SECRET must be set");\n    encode(\n        &Header::default(),\n        &claims,\n        &EncodingKey::from_secret(secret.as_bytes()),\n    )\n}\n\npub fn validate_jwt(token: &str) -> Result {\n    let secret = std::env::var("JWT_SECRET").expect("JWT_SECRET must be set");\n    let token_data = decode::(\n        token,\n        &DecodingKey::from_secret(secret.as_bytes()),\n        &Validation::default(),\n    )?;\n    Ok(token_data.claims)\n}
\n\n

3. GitHub के साथ OAuth 2.0 का कार्यान्वयन

\n\n

OAuth 2.0 के क्लासिक परिदृश्य पर विचार करें — GitHub के माध्यम से प्राधिकरण। उपयोगकर्ता को GitHub पर रीडायरेक्ट किया जाता है, पुष्टि के बाद एक कोड प्राप्त होता है, जिसे हम एक्सेस टोकन के लिए एक्सचेंज करते हैं।

\n\n

3.1. OAuth प्रवाह शुरू करने के लिए एंडपॉइंट

\n\n
// src/oauth.rs\nuse actix_web::{web, HttpResponse, HttpRequest};\nuse reqwest::Client;\nuse serde_json::Value;\n\npub async fn github_login() -> HttpResponse {\n    let client_id = std::env::var("GITHUB_CLIENT_ID").unwrap();\n    let redirect_uri = "http://localhost:8080/auth/github/callback";\n    \n    let auth_url = format!(\n        "https://github.com/login/oauth/authorize?client_id={}&redirect_uri={}&scope=user:email",\n        client_id, redirect_uri\n    );\n    \n    HttpRes                

ब्लॉग

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