Implementing Cookie Authentication Scheme in ASP.NET Core Application
इस संक्षिप्त लेख में ASP.NET Core एप्लीकेशन के भीतर कुकी ऑथेंटिकेशन स्क्रीम को कैसे इंप्लीमेंट किया जाता है इसके बारे में समझेंगे. जब एक बार एप्लीकेशन के भीतर ऑथेंटिकेशन इंप्लीमेंट हो जाता है तो उसके बाद एप्लीकेशन के किसी रिसोर्स को एक्सेस करने के लिए यह मान कर चलेंगे यूजर का ऑथेंटिकेटेड होना जरूरी है इसके लिए उस रिसोर्स के ऊपर [Authorize] नामक अटरीब्यूट का उपयोग करेंगे.
यदि यूजर ऑथेंटिकेटेड नहीं होगा तो ऐसी स्थिति में यूजर को लोगिन करने के लिए एप्लीकेशन बाध्य करेगा और यूजर को लॉगिन पेज पर रीडायरेक्ट कर देगा इसके लिए एप्लीकेशन के प्रोग्राम फाइल के भीतर कुकी का कॉन्फ़िगरेशन करना होगा. कुकी का कॉन्फ़िगरेशन करने से पहले ऑथेंटिकेशन सर्विस को लागू करना होगा. ऑथेंटिकेशन सर्विस को लागू करने के लिए निम्नलिखित एक्सटेंशन मेथड का उपयोग किया जाता है
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "Cookies";
options.DefaultSignInScheme = "Cookies";
});
इस एक्सटेंशन मेथड को कुकी ऑथेंटिकेशन के स्कीम के लिए कॉन्फ़िगर किया जा सकता है ऐसा करने के पश्चात कुकी की सर्विस को जब जोड़ा जाता है तो उस कुकी को भी कॉन्फ़िगर कर देते हैं जो बताता है कि कुकी का नाम क्या होगा, कब कुकी का निर्माण होगा और यदि यूजर ऑथेंटिकेटेड नहीं है तो उसे किस पेज पर रीडायरेक्ट करना है इत्यादि इसके अलावा और भी अलग अलग कंफीग्रेशन कुकी के संबंध में किया जा सकता है लेकिन इतना बेसिक कॉन्फ़िगरेशन करना अनिवार्य है
builder.Services.AddRazorPages();
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "Cookies";
options.DefaultSignInScheme = "Cookies";
}).AddCookie(options =>
{
options.Cookie.Name = "YourAppCookie";
options.Cookie.HttpOnly = true;
options.LoginPath = "/Account/Login";
});
साथ ही साथ Middleware पाइपलाइन के भीतर ऑथेंटिकेशन और ऑथराइजेशन Middleware को भी प्रॉपर जगह पर इंजेक्ट करना जरूरी है आमतौर पर इसे रूटीन Middleware के बाद रखा जाता है जब एप्लीकेशन को इस तरीके से कॉन्फ़िगर कर दिया जाता है तो इसका अर्थ यह नहीं है की एप्लीकेशन को रन करने पर ऑथेंटिकेशन कुकी का निर्माण हो जाएगा. वस्तुत ऑथेंटिकेशन कुकी का निर्माण तब होता है जब यूजर अपने आप को ऑथेंटिकेट करने के लिए लॉगिन पेज पर जाता है और सही पासवर्ड और यूजर नेम के साथ लॉग इन करता है:
@page "{Login}"
@model AuthenticationRazorApp.Pages.AccountModel
@{
}
<form action="" method="post">
<div class="container col-lg-6">
<label for="uname" class="form-label">Username</label>
<input type="text" placeholder="Enter Username" name="uname" required class="form-control">
<label for="psw" class="form-label">Password</label>
<input type="password" placeholder="Enter Password" name="psw" required class="form-control">
<label class="form-label">
<input type="checkbox" checked="checked" name="remember"> Remember me
</label>
<br />
<br />
<button type="submit" class="btn btn-primary">Login</button>
</div>
</form>
जब यूजर सही पासवर्ड और यूजर नेम के साथ लॉग इन करता है तो एप्लीकेशन एक ऑथेंटिकेशन कुकी का निर्माण करके क्लाइंट के ब्राउज़र के पास भेज देता है:
public async Task<IActionResult> OnPostAsync(string uname, string psw)
{
if (uname == "admin" && psw == "password")
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, uname),
new Claim(ClaimTypes.Role, "Administrator"),
};
var claimsIdentity = new ClaimsIdentity(claims, "Cookies");
// Generate authentication cookie with name as set in Program file
await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(claimsIdentity));
return LocalRedirect("/");
}
return Page();
}
ध्यान दीजिए कि ऑथेंटिकेशन कुकी का निर्माण करने के लिए यह जरूरी है कि यूजर के इनफार्मेशन को Claims और ClaimsIdentity के रूप में एकत्र करके उसे ClaimsPrincipal ऑब्जेक्ट के भीतर रख दिया जाए.जब यूजर फॉर्म सबमिट करता है, तो हम सर्वर-साइड पर डेटा को वैलिडेट करते हैं। कुकी बनाने के लिए यूजर की जानकारी को Claims और ClaimsIdentity के रूप में एकत्र किया जाता है। इस के बाद कुकी को सीरियलाइज और इंक्रिप्ट कर दिया जाता है और उसके बाद सुरक्षित तरीके से एप्लीकेशन के द्वारा इसे क्लाइंट के पास भेज दिया जाता है डेवलपर के रूप में हमें सीरिएलाइजेशन और इंक्रिप्शन का कार्य नहीं करना होता यह काम स्वतः ही हो जाता है।
ऑथेंटिकेशन के बाद निम्न Index page access हो जाता है:
[Authorize(Roles = "Administrator")]
public class IndexModel : PageModel
{
public void OnGet()
{
ViewData["msg"] = "This page is protected by the [Authorize] attribute, which means that only authenticated users can access it.";
}
}
निष्कर्ष ASP.NET Core में कुकी ऑथेंटिकेशन लागू करना काफी सरल और सुरक्षित है। यह न केवल यूजर के सत्र (Session) को प्रबंधित करता है बल्कि रोल-आधारित एक्सेस कंट्रोल (RBAC) को भी मजबूती से लागू करने में मदद करता है।
टिप्पणियाँ
एक टिप्पणी भेजें