Rust में JWT टोकन: jsonwebtoken लाइब्रेरी और प्रमाणीकरण के साथ कार्य

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

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

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

Rust में JWT टोकन: jsonwebtoken लाइब्रेरी

JSON Web Tokens (JWT) JSON पर आधारित एक्सेस टोकन बनाने के लिए एक खुला मानक (RFC 7519) है। Rust पारिस्थितिकी तंत्र में JWT के साथ काम करने के लिए सबसे लोकप्रिय और स्थिर लाइब्रेरी में से एक jsonwebtoken है। यह JWT टोकन बनाने, हस्ताक्षर करने, सत्यापित करने और डिकोड करने के लिए कार्यों का एक पूरा सेट प्रदान करता है, जो सममित (HS256, HS384, HS512) और असममित (RS256, RS384, RS512, ES256, ES384) दोनों एन्क्रिप्शन एल्गोरिदम का समर्थन करता है।



स्थापना और कॉन्फ़िगरेशन

आरंभ करने के लिए, अपने प्रोजेक्ट की Cargo.toml फ़ाइल में निर्भरता जोड़ें:

[dependencies]jsonwebtoken = "9.3"serde = { version = "1.0", features = ["derive"] }chrono = "0.4"

टोकन डेटा के सीरियलाइज़ेशन और डीसीरियलाइज़ेशन के लिए serde लाइब्रेरी आवश्यक है, और chrono टाइमस्टैम्प (exp, iat, nbf) के साथ काम करना आसान बनाता है।



JWT की मूल संरचना

JWT टोकन में तीन भाग होते हैं: हेडर, पेलोड (दावे) और हस्ताक्षर। Rust में, इसे स्ट्रक्चर के माध्यम से कार्यान्वित किया जाता है:

use serde::{Serialize, Deserialize};

#[derive(Debug, Serialize, Deserialize)]struct Claims { sub: String, // विषय (आमतौर पर उपयोगकर्ता ID) exp: usize, // समाप्ति समय (unix timestamp) iat: usize, // निर्माण समय (unix timestamp) role: String, // कस्टम फ़ील्ड}


JWT टोकन बनाना और हस्ताक्षर करना

HS256 एल्गोरिदम (सममित एन्क्रिप्शन) का उपयोग करके टोकन बनाने का एक पूरा उदाहरण देखें:

use jsonwebtoken::{encode, Header, EncodingKey};use chrono::Utc;

fn create_jwt(user_id: &str, secret: &str) -> Result { let now = Utc::now().timestamp() as usize; let claims = Claims { sub: user_id.to_string(), exp: now + 3600, // टोकन 1 घंटे के लिए वैध है iat: now, role: "user".to_string(), };

let token = encode( &Header::default(), // डिफ़ॉल्ट रूप से HS256 &claims, &EncodingKey::from_secret(secret.as_bytes()), )?; Ok(token)}


टोकन का सत्यापन और डिकोडिंग

टोकन की प्रामाणिकता की जांच करने के लिए, एल्गोरिदम और गुप्त कुंजी निर्दिष्ट करते हुए decode फ़ंक्शन का उपयोग किया जाता है:

use jsonwebtoken::{decode, DecodingKey, Validation, Algorithm};

fn verify_jwt(token: &str, secret: &str) -> Result { let validation = Validation::new(Algorithm::HS256); let token_data = decode::( token, &DecodingKey::from_secret(secret.as_bytes()), &validation, )?; Ok(token_data.claims)}


असममित एल्गोरिदम (RS256) के साथ कार्य करना

प्रोडक्शन वातावरण के लिए, असममित एन्क्रिप्शन का उपयोग करने की अनुशंसा की जाती है। RS256 के साथ उदाहरण:

use jsonwebtoken::{encode, decode, Header, EncodingKey, DecodingKey, Validation, Algorithm};

// प्राइवेट कुंजी के साथ टोकन बनानाfn create_rs256_token(user_id: &str, private_key_pem: &str) -> Result> { let claims = Claims { sub: user_id.to_string(), exp: (Utc::now().timestamp() + 3600) as usize, iat: Utc::now().timestamp() as usize, role: "admin".to_string(), };

let token = encode( &Header::new(Algorithm::RS256), &claims, &EncodingKey::from_rsa_pem(private_key_pem.as_bytes())?, )?; Ok(token)}

// पब्लिक कुंजी के साथ सत्यापनfn verify_rs256_token(token: &str, public_key_pem: &str) -> Result> { let mut validation = Validation::new(Algorithm::RS256); validation.validate_exp = true; // समाप्ति तिथि की जाँच

let token_data = decode::( token, &DecodingKey::from_rsa_pem(public_key_pem.as_bytes())?, &validat

अनुशंसाएँ