C# (.NET) में JWT टोकन: निर्माण, सत्यापन और मान्यता
JSON Web Token (JWT) JSON प्रारूप पर आधारित एक्सेस टोकन बनाने के लिए एक खुला मानक (RFC 7519) है। JWT का व्यापक रूप से आधुनिक वेब अनुप्रयोगों में क्लाइंट और सर्वर के बीच प्रमाणीकरण और सूचना आदान-प्रदान के लिए उपयोग किया जाता है। इस लेख में, हम विस्तार से देखेंगे कि C# (.NET) इकोसिस्टम में JWT टोकन के साथ कैसे काम करें, जिसमें टोकन का निर्माण, हस्ताक्षर, सत्यापन और मान्यता शामिल है।
JWT के मुख्य घटक
JWT तीन भागों से बना होता है, जो बिंदुओं द्वारा अलग किए जाते हैं:
- Header — हेडर, जिसमें टोकन प्रकार और हस्ताक्षर एल्गोरिदम के बारे में जानकारी होती है
- Payload — डेटा (दावों) के साथ पेलोड
- Signature — हस्ताक्षर, जो टोकन की अखंडता सुनिश्चित करता है
JWT टोकन का उदाहरण: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
आवश्यक पैकेज स्थापित करना
.NET में JWT के साथ काम करने के लिए, पैकेज System.IdentityModel.Tokens.Jwt स्थापित करना आवश्यक है। यह NuGet Package Manager या .NET CLI के माध्यम से किया जा सकता है:
dotnet add package System.IdentityModel.Tokens.JwtASP.NET Core के साथ एकीकरण के लिए Microsoft.AspNetCore.Authentication.JwtBearer स्थापित करने की भी आवश्यकता हो सकती है:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerC# में JWT टोकन बनाना
सममित कुंजी (HMAC SHA256) का उपयोग करके JWT टोकन बनाने का एक पूर्ण उदाहरण देखें:
using System;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;using Microsoft.IdentityModel.Tokens;
public class JwtService{ private readonly string _secretKey; private readonly string _issuer; private readonly string _audience;
public JwtService(string secretKey, string issuer, string audience) { _secretKey = secretKey; _issuer = issuer; _audience = audience; }
public string GenerateToken(string userId, string userName, string role) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var claims = new[] { new Claim(ClaimTypes.NameIdentifier, userId), new Claim(ClaimTypes.Name, userName), new Claim(ClaimTypes.Role, role), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString()) };
var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.UtcNow.AddHours(1), signingCredentials: credentials );
return new JwtSecurityTokenHandler().WriteToken(token); }}JWT टोकन का सत्यापन और मान्यता
टोकन की प्रामाणिकता की जांच करने और उससे डेटा निकालने के लिए ValidateToken विधि का उपयोग किया जाता है:
public ClaimsPrincipal ValidateToken(string token){ var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.UTF8.GetBytes(_secretKey);
try { var principal = tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidIssuer = _issuer, ValidateAudience = true, ValidAudience = _audience, ValidateLifetime = true, ClockSkew = TimeSpan.Zero\