JWT टोकन C# (.NET): System.IdentityModel.Tokens.Jwt के साथ काम करना

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

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

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

C# (.NET) में JWT टोकन: System.IdentityModel.Tokens.Jwt के साथ पूरी गाइड

JSON Web Token (JWT) एक कॉम्पैक्ट, URL-सुरक्षित फॉर्मेट है जो JSON ऑब्जेक्ट के रूप में डेटा ट्रांसफर करने के लिए उपयोग होता है। C# (.NET) इकोसिस्टम में JWT के साथ काम करने के लिए System.IdentityModel.Tokens.Jwt लाइब्रेरी का उपयोग किया जाता है, जो Microsoft.IdentityModel.Tokens पैकेज का हिस्सा है। यह टूल JWT टोकन जनरेट, साइन, वेरिफाई और डीकोड करने में मदद करता है, जिससे वेब एप्लिकेशन, API और माइक्रोसर्विसेज में सुरक्षित ऑथेंटिकेशन और डेटा एक्सचेंज संभव होता है।

लाइब्रेरी इंस्टॉल करना

शुरू करने के लिए, अपने प्रोजेक्ट में NuGet पैकेज जोड़ें। पैकेज मैनेजर कंसोल में यह कमांड चलाएं:

dotnet add package System.IdentityModel.Tokens.Jwt

या Visual Studio में Package Manager Console से:

Install-Package System.IdentityModel.Tokens.Jwt

लाइब्रेरी के मुख्य कंपोनेंट्स

  • JwtSecurityTokenHandler — टोकन बनाने, सीरियलाइज़ करने और वेरिफाई करने का मुख्य क्लास।
  • SecurityTokenDescriptor — टोकन का विवरण: claims, समय सीमा, सिग्नेचर।
  • SymmetricSecurityKey — साइनिंग के लिए सिमेट्रिक की (HS256, HS384, HS512)।
  • SigningCredentials — साइनिंग क्रेडेंशियल्स (एल्गोरिदम + की)।
  • TokenValidationParameters — वैलिडेशन पैरामीटर्स (सिग्नेचर, समय सीमा, इश्यूर की जांच)।

C# में JWT टोकन जनरेट करना

आइए एक सरल टोकन बनाएं जिसमें यूज़र के claims और 1 घंटे की समय सीमा हो:

using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

public string GenerateToken()
{
    var secretKey = "my_super_secret_key_1234567890!";
    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
    var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

    var claims = new[]
    {
        new Claim(ClaimTypes.Name, "राहुल शर्मा"),
        new Claim(ClaimTypes.Email, "rahul@example.com"),
        new Claim(ClaimTypes.Role, "Admin")
    };

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(claims),
        Expires = DateTime.UtcNow.AddHours(1),
        Issuer = "MyApp",
        Audience = "MyAppUsers",
        SigningCredentials = credentials
    };

    var tokenHandler = new JwtSecurityTokenHandler();
    var token = tokenHandler.CreateToken(tokenDescriptor);
    return tokenHandler.WriteToken(token);
}

JWT टोकन की जांच (वेरिफिकेशन)

क्लाइंट से टोकन प्राप्त करने पर, उसके सिग्नेचर, समय सीमा और अन्य पैरामीटर्स की जांच करना जरूरी है:

public ClaimsPrincipal ValidateToken(string token)
{
    var secretKey = "my_super_secret_key_1234567890!";
    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));

    var tokenHandler = new JwtSecurityTokenHandler();
    var validationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidIssuer = "MyApp",
        ValidateAudience = true,
        ValidAudience = "MyAppUsers",
        ValidateLifetime = true,
        IssuerSigningKey = key,
        ClockSkew = TimeSpan.Zero // डिफ़ॉल्ट समय अंतर हटाएं
    };

    try
    {
        var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);
        return principal;
    }
    catch (SecurityTokenExpiredException)
    {
        Console.WriteLine("टोकन की समय सीमा समाप्त हो गई है");
        return null;
    }
    catch (SecurityTokenInvalidSignatureException)
    {
        Console.WriteLine("टोकन का सिग्नेचर गलत है");
        return null;
    }
}

बिना सिग्नेचर जांच के टोकन डीकोड करना

कभी-कभी केवल टोकन से डेटा पढ़ना होता है (जैसे डीबगिंग के लिए)। ReadJwtToken मेथड का उपयोग करें

अनुशंसाएँ