C# पर OAuth 2.0 और JWT का परिचय
\nआधुनिक वेब अनुप्रयोगों को मजबूत सुरक्षा तंत्र की आवश्यकता होती है। दो प्रमुख प्रोटोकॉल — OAuth 2.0 और JWT (JSON Web Token) — प्राधिकरण और प्रमाणीकरण को लागू करने के लिए डी-फैक्टो मानक बन गए हैं। इस लेख में, हम समझेंगे कि C# (.NET) पारिस्थितिकी तंत्र में इन तकनीकों का उपयोग कैसे करें।
\nOAuth 2.0 एक प्रत्यायोजित पहुँच प्रोटोकॉल है जो अनुप्रयोगों को उपयोगकर्ता की साख प्रदान किए बिना उसके संसाधनों तक सीमित पहुँच प्राप्त करने की अनुमति देता है। JWT, बदले में, टोकन का एक कॉम्पैक्ट और स्व-निहित प्रारूप है, जिसका उपयोग अक्सर क्लाइंट और सर्वर के बीच प्रमाणीकरण जानकारी प्रसारित करने के लिए किया जाता है।
\nइस मार्गदर्शिका में, हम ASP.NET Core पर एक सरल वेब-API बनाएंगे, जो JWT-टोकन का उपयोग करके OAuth 2.0 को लागू करता है। आप सीखेंगे कि एंडपॉइंट्स की जनरेशन, वैलिडेशन और सुरक्षा कैसे सेट अप करें।
\n\nOAuth 2.0 और JWT क्या है?
\nकोड पर जाने से पहले, आइए बुनियादी अवधारणाओं को समझें।
\nOAuth 2.0
\nOAuth 2.0 चार भूमिकाएँ परिभाषित करता है:
\n- \n
- Resource Owner (संसाधन स्वामी) — आमतौर पर उपयोगकर्ता। \n
- Client (क्लाइंट) — वह अनुप्रयोग जो पहुँच प्राप्त करना चाहता है। \n
- Authorization Server (प्राधिकरण सर्वर) — टोकन जारी करता है। \n
- Resource Server (संसाधन सर्वर) — संरक्षित डेटा प्रदान करता है। \n
मुख्य प्रवाह Authorization Code Grant में शामिल है: उपयोगकर्ता को प्राधिकरण सर्वर पर रीडायरेक्ट करना, कोड प्राप्त करना, एक्सेस टोकन के लिए कोड का आदान-प्रदान करना।
\n\nJWT (JSON Web Token)
\nJWT तीन भागों से बना होता है, जो बिंदुओं द्वारा अलग किए जाते हैं:
\n- \n
- Header — टोकन का प्रकार और हस्ताक्षर एल्गोरिदम (जैसे, HS256)। \n
- Payload — डेटा (claims), जैसे उपयोगकर्ता ID, भूमिका, समाप्ति तिथि। \n
- Signature — गुप्त कुंजी का उपयोग करके बनाया गया हस्ताक्षर। \n
JWT का उदाहरण: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
ASP.NET Core प्रोजेक्ट सेट अप करना
\nप्रमाणीकरण समर्थन के साथ एक नया वेब-API प्रोजेक्ट बनाएं।
\ndotnet new webapi -n OAuthJwtDemo\ncd OAuthJwtDemo\nआवश्यक NuGet पैकेज जोड़ें:
\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package System.IdentityModel.Tokens.Jwt\n\nappsettings.json में कॉन्फ़िगरेशन
\nफ़ाइल appsettings.json में JWT सेटिंग्स के लिए एक अनुभाग जोड़ें:
{\n "JwtSettings": {\n "SecretKey": "YOUR_SUPER_SECRET_KEY_AT_LEAST_32_CHARS",\n "Issuer": "OAuthJwtDemo",\n "Audience": "OAuthJwtDemoClient",\n "ExpirationMinutes": 60\n }\n}\nमहत्वपूर्ण: वास्तविक प्रोजेक्ट में, गुप्त कुंजी को User Secrets या Azure Key Vault में संग्रहीत करें।
\n\nJWT जनरेशन सेवा का कार्यान्वयन
\nटोकन के साथ काम करने के लिए एक इंटरफ़ेस और उसका कार्यान्वयन बनाएं।
\nIJwtService इंटरफ़ेस
\npublic interface IJwtService\n{\n string GenerateToken(string userId, string role);\n ClaimsPrincipal ValidateToken(string token);\n}\n\nJwtService का कार्यान्वयन
\npublic class JwtService : IJwtService\n{\n private readonly JwtSettings _settings;\n\n public JwtService(IOptions<JwtSettings> settings)\n {\n _settings = settings.Value;\n }\n\n public string GenerateToken(string userId, string role)\n {\n var claims = new[]\n {\n new Claim(ClaimTypes.NameIdentifier, userId),\n new Claim(ClaimTypes.Role, role),\n new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n };\n\n var key = new Symmetric