C# (.NET) में प्राधिकरण और प्रमाणीकरण: एक संपूर्ण मार्गदर्शिका
वेब अनुप्रयोगों की सुरक्षा आधुनिक विकास की आधारशिला है। C# (.NET) पारिस्थितिकी तंत्र में, अंतर्निहित प्रमाणीकरण और प्राधिकरण तंत्र आपको अपने एप्लिकेशन को लचीले और विश्वसनीय रूप से सुरक्षित करने की अनुमति देते हैं। इस लेख में, हम Identity, JWT और भूमिका-आधारित मॉडल के साथ काम करने के लिए मुख्य अवधारणाओं, उपकरणों और कोड उदाहरणों पर चर्चा करेंगे।
1. मूल अवधारणाएँ
कोड पर जाने से पहले, दो शब्दों के बीच अंतर करना महत्वपूर्ण है:
- प्रमाणीकरण — उपयोगकर्ता की पहचान सत्यापित करने की प्रक्रिया (आप कौन हैं?)। यह आमतौर पर लॉगिन/पासवर्ड, टोकन या बाहरी प्रदाताओं के माध्यम से किया जाता है।
- प्राधिकरण — पहुँच अधिकार निर्धारित करने की प्रक्रिया (आप क्या कर सकते हैं?)। यह भूमिकाओं, नीतियों या claims के माध्यम से कार्यान्वित किया जाता है।
2. ASP.NET Core Identity — अंतर्निहित समाधान
Microsoft.AspNetCore.Identity एक पूर्ण उपयोगकर्ता प्रबंधन प्रणाली है जिसमें पंजीकरण, लॉगिन, पासवर्ड रीसेट, दो-कारक प्रमाणीकरण और बहुत कुछ शामिल है। यह Entity Framework Core के साथ काम करता है और किसी भी डेटा स्टोरेज का समर्थन करता है।
स्थापना:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCoredotnet add package Microsoft.EntityFrameworkCore.SqlServerउपयोगकर्ता पंजीकरण का उदाहरण (Account नियंत्रक):
public class AccountController : Controller{ private readonly UserManager<IdentityUser> _userManager; private readonly SignInManager<IdentityUser> _signInManager;
public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager) { _userManager = userManager; _signInManager = signInManager; }
[HttpPost] public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new IdentityUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); } return View(model); }}3. JWT (JSON Web Tokens) — स्टेटलेस प्रमाणीकरण
आधुनिक SPA (React, Angular) या मोबाइल एप्लिकेशन के लिए अक्सर JWT का उपयोग किया जाता है। टोकन सर्वर द्वारा हस्ताक्षरित होता है और इसमें उपयोगकर्ता के बारे में claims (दावे) होते हैं। सर्वर सत्र संग्रहीत नहीं करता है, जो स्केलिंग को सरल बनाता है।
Program.cs में कॉन्फ़िगरेशन:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = builder.Configuration["Jwt:Issuer"], ValidateAudience = true, ValidAudience = builder.Configuration["Jwt:Audience"], ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])) }; });टोकन जनरेशन:
public string GenerateToken(IdentityUser user){ var claims = new[] { new Claim(ClaimTypes.NameIdentifier, user.Id), new Claim(ClaimTypes.Email, user.Email), new Claim(ClaimTypes.Role, "User") };
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
va