Rust के लिए OAuth क्लाइंट: oauth2 लाइब्रेरी
OAuth 2.0 – एक्सेस को प्रतिनिधि बनाने के लिए उद्योग मानक है। इसका व्यापक रूप से पासवर्ड साझा किए बिना तृतीय-पक्ष सेवाओं (Google, GitHub, Facebook) के माध्यम से उपयोगकर्ताओं को प्राधिकृत करने के लिए उपयोग किया जाता है। Rust पारिस्थितिकी तंत्र में OAuth 2.0 को लागू करने के लिए सबसे लोकप्रिय और परिपक्व लाइब्रेरी में से एक oauth2 (crate oauth2) है। यह किसी भी OAuth प्रदाता के साथ काम करने के लिए एक सुरक्षित, अतुल्यकालिक और लचीला API प्रदान करती है।
मुख्य विशेषताएं
- सभी मानक अनुदानों का समर्थन: Authorization Code, Client Credentials, Resource Owner Password Credentials, Implicit।
- PKCE के लिए अंतर्निहित समर्थन (Proof Key for Code Exchange) सार्वजनिक क्लाइंट की सुरक्षा बढ़ाने के लिए।
- अतुल्यकालिक कार्य हुड के नीचे
reqwestयाureqका उपयोग करके। - प्रकार सुरक्षा: सभी टोकन, URL और पैरामीटर सख्ती से टाइप किए गए हैं, जो संकलन चरण में त्रुटियों को समाप्त करते हैं।
- लचीला कॉन्फ़िगरेशन एंडपॉइंट और scopes के कॉन्फ़िगरेशन के माध्यम से किसी भी प्रदाता के लिए।
- टोकन के साथ कार्य: स्वचालित रिफ्रेश, समाप्ति तिथि की जाँच।
स्थापना
अपने Cargo.toml में निर्भरता जोड़ें:
[dependencies]oauth2 = "4.4"tokio = { version = "1", features = ["full"] }serde = { version = "1", features = ["derive"] }reqwest = { version = "0.11", features = ["json"] }मूल उदाहरण: Google के माध्यम से प्राधिकरण
Google के लिए Authorization Code + PKCE अनुदान के साथ पूर्ण OAuth 2.0 चक्र देखें:
use oauth2::{ AuthorizationCode, AuthUrl, ClientId, ClientSecret, CsrfToken, PkceCodeChallenge, RedirectUrl, Scope, TokenResponse, TokenUrl,};use oauth2::basic::BasicClient;use oauth2::reqwest::async_http_client;use url::Url;
#[tokio::main]async fn main() -> Result<(), Box> { // 1. Google सेटिंग्स के साथ क्लाइंट बनाएँ let client = BasicClient::new( ClientId::new("आपका_GOOGLE_CLIENT_ID".to_string()), Some(ClientSecret::new("आपका_GOOGLE_CLIENT_SECRET".to_string())), AuthUrl::new("https://accounts.google.com/o/oauth2/v2/auth".to_string())?, Some(TokenUrl::new("https://oauth2.googleapis.com/token".to_string())?), ) .set_redirect_uri(RedirectUrl::new("http://localhost:8080/callback".to_string())?);
// 2. PKCE चैलेंज उत्पन्न करें let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256();
// 3. उपयोगकर्ता प्राधिकरण के लिए URL बनाएँ let (auth_url, csrf_token) = client .authorize_url(CsrfToken::new_random) .add_scope(Scope::new("openid".to_string())) .add_scope(Scope::new("profile".to_string())) .add_scope(Scope::new("email".to_string())) .set_pkce_challenge(pkce_challenge) .url();
println!("ब्राउज़र में खोलें: {}", auth_url);
// 4. (सिमुलेशन) उपयोगकर्ता से प्राधिकरण कोड प्राप्त करें let code = "रीडायरेक्ट के बाद ब्राउज़र से कोड";
// 5. कोड को टोकन के लिए एक्सचेंज करें let token_response = client .exchange_code(AuthorizationCode::new(code.to_string())) .set_pkce_verifier(pkce_verifier) .request_async(async_http_client) .await?;
println!("Access token: {}", token_response.access_token().secret()); println!("Refresh token: {:?}", token_response.refresh_token());
Ok(())} उन्नत परिदृश्य
1. टोकन रिफ्रेश (Refresh Token)
जब access token समाप्त हो जाता है, तो नया प्राप्त करने के लिए refresh token का उपयोग करें:
use oauth2::RefreshToken;
let refresh_token = RefreshToken::new("आपका_रिफ्रेश_टोकन".to_string());let new_token = client .exchange_refresh_token(&refresh_token) .requ पुस्तकालय में भी
Go (Golang) के लिए gRPC: लाइब्रेरीज़, उदाहरण और व्यावहारिक मार्गदर्शिका
PHP में Markdown प्रोसेसिंग और पार्सिंग: लाइब्रेरी और उदाहरण
Swift अनुप्रयोगों की निगरानी: iOS/macOS के लिए लाइब्रेरी और उपकरण
TypeScript के लिए gRPC: लाइब्रेरी और उपयोग के उदाहरण