Rust में प्राधिकरण और प्रमाणीकरण: JWT से सत्रों तक
सिस्टम और वेब प्रोग्रामिंग की दुनिया में, Rust ने एक सुरक्षित और तेज़ भाषा के रूप में प्रतिष्ठा अर्जित की है। हालाँकि, वेब एप्लिकेशन बनाते समय, डेवलपर्स को अक्सर प्रमाणीकरण (उपयोगकर्ता की पहचान सत्यापित करना) और प्राधिकरण (पहुँच अधिकारों की जाँच करना) को लागू करने की चुनौती का सामना करना पड़ता है। इस लेख में, हम Rust में इन तंत्रों को लागू करने के लिए प्रमुख पुस्तकालयों और दृष्टिकोणों पर चर्चा करेंगे, साथ ही व्यावहारिक कोड उदाहरण भी प्रस्तुत करेंगे।
प्रमाणीकरण और प्राधिकरण की मूल अवधारणाएँ
उपकरणों पर जाने से पहले, अवधारणाओं में अंतर करना महत्वपूर्ण है:
- प्रमाणीकरण — यह सत्यापित करने की प्रक्रिया है कि उपयोगकर्ता वही है जो वह होने का दावा करता है। यह आमतौर पर लॉगिन/पासवर्ड, टोकन या बायोमेट्रिक्स के माध्यम से किया जाता है।
- प्राधिकरण — यह निर्धारित करना कि प्रमाणित उपयोगकर्ता के लिए कौन से संसाधन और क्रियाएँ उपलब्ध हैं। इसे अक्सर भूमिकाओं (व्यवस्थापक, मॉडरेटर, उपयोगकर्ता) या पहुँच अधिकारों के माध्यम से कार्यान्वित किया जाता है।
Rust में, दोनों प्रक्रियाओं को निम्न स्तर पर (टोकन का मैन्युअल प्रबंधन) और तैयार पुस्तकालयों की मदद से लागू किया जा सकता है।
Rust में प्रमाणीकरण के लिए लोकप्रिय पुस्तकालय
Rust में सत्रों और टोकन के साथ काम करने के लिए कई परिपक्व समाधान मौजूद हैं:
actix-identity— Actix-web वेब फ्रेमवर्क में सत्र प्रबंधन के लिए। कुकी-सत्र और Redis का समर्थन करता है।jsonwebtoken— JWT (JSON Web Tokens) के साथ काम करने के लिए पुस्तकालय। टोकन बनाने, हस्ताक्षर करने और सत्यापित करने की अनुमति देता है।argon2— OWASP द्वारा अनुशंसित Argon2 पासवर्ड हैशिंग एल्गोरिदम का कार्यान्वयन।bcrypt— पासवर्ड हैशिंग के लिए क्लासिक पुस्तकालय।
नीचे हम प्रत्येक उपकरण को एक उदाहरण के साथ देखेंगे।
उदाहरण 1: JWT और jsonwebtoken के साथ प्रमाणीकरण
JWT REST API में प्रमाणीकरण के सबसे लोकप्रिय तरीकों में से एक है। टोकन में दावे (claims) होते हैं और एक गुप्त कुंजी के साथ हस्ताक्षरित होता है। आइए jsonwebtoken पुस्तकालय का उपयोग करके एक बुनियादी कार्यान्वयन देखें।
// cargo add jsonwebtoken serdeuse jsonwebtoken::{encode, decode, Header, Validation, EncodingKey, DecodingKey};use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]struct Claims { sub: String, // उपयोगकर्ता पहचानकर्ता exp: usize, // समाप्ति समय (UNIX टाइमस्टैम्प) role: String, // उपयोगकर्ता भूमिका}
fn create_token(user_id: &str, role: &str) -> Result<String, jsonwebtoken::errors::Error> { let claims = Claims { sub: user_id.to_owned(), exp: (chrono::Utc::now() + chrono::Duration::hours(24)).timestamp() as usize, role: role.to_owned(), }; encode( &Header::default(), &claims, &EncodingKey::from_secret(b"आपकी_गुप्त_कुंजी") )}
fn verify_token(token: &str) -> Result<Claims, jsonwebtoken::errors::Error> { let token_data = decode::<Claims>( token, &DecodingKey::from_secret(b"आपकी_गुप्त_कुंजी"), &Validation::default() )?; Ok(token_data.claims)}इस उदाहरण में, हम 24 घंटे के लिए एक टोकन बनाते हैं जिसमें उपयोगकर्ता ID और उसकी भूमिका होती है। verify_token फ़ंक्शन हस्ताक्षर की जाँच करता है और दावे लौटाता है, जिनका उपयोग प्राधिकरण के लिए किया जा सकता है।
उदाहरण 2: Argon2 के साथ पासवर्ड हैशिंग
पासवर्ड को कभी भी सादे पाठ में संग्रहीत न करें! Argon2 का उपयोग करें — एक आधुनिक और सुरक्षित हैशिंग एल्गोरिदम।
// cargo add argon2use argon2::{Argon2, PasswordHash, PasswordHasher, PasswordVerifier};use argon2::password_hash::{SaltString, rand_core::OsRng};
fn hash_password(password: &str) -> String { let salt = SaltString::generate(&mut OsRng); let argon2 = Argon2::default(); argon2.hash_password(password.as_bytes(), &salt) .expect("हैशिंग त्रुटि")