ASP.NET Core Identity چیست؟
ASP.NET Core Identity چیست؟
ASP.NET Core Identity یک Membership System است که به شما اجازه میدهد قابلیتهای ورود (Login) و ثبتنام (Register) را به برنامههای خود اضافه کنید. این سیستم به صورت پیشفرض با Entity Framework Core سازگار است تا اطلاعات کاربران را در پایگاه داده (معمولاً SQL Server) ذخیره کند، اما به قدری منعطف طراحی شده که میتوانید آن را برای کار با MongoDB یا سایر دیتابیسها نیز سفارشیسازی کنید.
اجزای اصلی ساختار Identity
برای درک بهتر، باید با سه بازیگر اصلی آشنا شوید:
-
UserManager: کلاس همهکاره برای مدیریت کاربر (ایجاد کاربر، تغییر رمز عبور، تایید ایمیل و...).
-
SignInManager: مسئول فرآیند ورود، خروج و مدیریت کوکیها یا توکنهای کاربر.
-
RoleManager: ابزاری برای مدیریت نقشها و گروههای کاربری.
راهاندازی و پیکربندی اولیه
برای شروع، شما به پکیج Microsoft.AspNetCore.Identity.EntityFrameworkCore نیاز دارید. اولین قدم، تعریف کلاس کاربر سفارشی است. پیشنهاد میشود همیشه از همان ابتدا یک کلاس از IdentityUser ارثبری کنید، حتی اگر فعلاً فیلد اضافی نمیخواهید.
public class ApplicationUser : IdentityUser
{
public string FullName { get; set; }
public DateTime BirthDate { get; set; }
}
سپس باید DbContext خود را بهجای DbContext معمولی، از IdentityDbContext مشتق کنید:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
}
معماری امنیت: Authentication vs. Authorization
بسیاری از توسعهدهندگان این دو مفهوم را با هم اشتباه میگیرند. بیایید یک بار برای همیشه این موضوع را روشن کنیم:
-
Authentication (احراز هویت): یعنی "شما کی هستید؟". آیا یوزرنیم و پسورد شما درست است؟
-
Authorization (سطح دسترسی): یعنی "شما اجازه انجام چه کاری را دارید؟". آیا یک کاربر عادی میتواند دیتابیس را پاک کند؟ (امیدوارم پاسختان خیر باشد!)
در ASP.NET Core، خط لوله (Middleware) به این صورت عمل میکند:
-
UseAuthentication: ابتدا هویت کاربر را بررسی میکند.
-
UseAuthorization: سپس بررسی میکند که آیا این هویت تایید شده، اجازه دسترسی به منبع مورد نظر را دارد یا خیر.
مدیریت ادعاها (Claims-Based Authorization)
در سیستمهای قدیمی، ما فقط "نقش" (Role) داشتیم (مثلاً Admin یا User). اما در دنیای مدرن، ما از Claims استفاده میکنیم. ادعا (Claim) هر چیزی است که سیستم درباره کاربر میداند.
مثلاً: "این کاربر ایمیلش تایید شده است"، "سن او بالای ۱۸ سال است" یا "کد ملی او ۱۲۳۴۵ است".
چرا Claim بهتر از Role است؟
فرض کنید میخواهید دسترسی به بخشی از سایت را فقط به کسانی بدهید که "نشان طلایی" دارند. در سیستم نقشمحور، باید یک نقش جدید بسازید. در سیستم Claim-محور، فقط یک ادعا به کاربر اضافه میکنید. این روش بسیار منعطفتر است.
| ویژگی | Role-Based | Claims-Based |
| ساختار | سلسله مراتبی و ثابت | کلید-مقدار (Key-Value) |
| انعطافپذیری | کم | بسیار زیاد |
| پیچیدگی | ساده | متوسط |
قابلیتهای پیشرفته در .NET 8 و نسخههای جدیدتر
با معرفی .NET 8، تحول بزرگی در Identity رخ داد. پیش از این، استفاده از Identity در اپلیکیشنهای SPA (مثل React یا Angular) به دلیل وابستگی شدید به Razor Pages کمی دشوار بود.
Identity API Endpoints
حالا با یک خط کد در Program.cs میتوانید تمام نقاط پایانی (Endpoints) لازم برای ورود، ثبتنام و مدیریت توکن را ایجاد کنید:
app.MapIdentityApi();
این متد به صورت خودکار مسیرهایی مثل /login و /register را میسازد که خروجی JSON میدهند. این یعنی خداحافظی با کدهای تکراری برای احراز هویت در سمت فرانتاند!

امنیت رمزنگاری و سیاستهای عبور
ASP.NET Core Identity به صورت پیشفرض از الگوریتم PBKDF2 برای هش کردن رمزهای عبور استفاده میکند که بسیار امن است. اما شما میتوانید سیاستهای سختگیرانهتری وضع کنید:
builder.Services.Configure(options =>
{
// تنظیمات پسورد
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = true;
// تنظیمات قفل شدن حساب (Lockout)
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
});
نکته هوشمندانه: همیشه قابلیت Lockout را فعال کنید. این کار جلوی حملات Brute-force (حدس زدن رمز عبور توسط ربات) را میگیرد.
احراز هویت خارجی (External Logins)
کاربران امروزی حوصله پر کردن فرمهای ثبتنام طولانی را ندارند. Identity به راحتی با سرویسهای جانبی مثل Google، Microsoft و Facebook یکپارچه میشود.
فقط کافی است کلید API را از کنسول گوگل بگیرید و در تنظیمات برنامه وارد کنید. Identity بقیه کارها را انجام میدهد؛ از ایجاد حساب کاربری محلی تا لینک کردن آن به حساب گوگل کاربر.
احراز هویت دو مرحلهای (2FA)
امنیت یعنی داشتن چندین لایه دفاعی. Identity از طریق دو روش رایج 2FA را پشتیبانی میکند:
-
SMS: ارسال کد از طریق پیامک (نیاز به پنل پیامکی).
-
Authenticator App: استفاده از اپلیکیشنهایی مثل Google Authenticator یا Microsoft Authenticator با استفاده از کدهای QR.
بهترین تمرینها (Best Practices) برای حرفهایها
برای اینکه پروژهای در سطح Enterprise داشته باشید، این موارد را فراموش نکنید:
-
استفاده از GUID برای Primary Key: به طور پیشفرض، Identity از string برای ID استفاده میکند. تغییر آن به Guid یا int (بسته به نیاز دیتابیس) میتواند در کوئریها پرفورمنس بهتری داشته باشد.
-
Personal Data: فیلدهایی که حاوی اطلاعات حساس هستند را با اینترفیس [PersonalData] علامتگذاری کنید تا در هنگام حذف حساب کاربر، Identity بداند چه مواردی را پاک یا ناشناسسازی کند.
-
سفارشیسازی Token Providers: اگر میخواهید زمان انقضای ایمیلهای تاییدیه یا کدهای بازنشانی رمز عبور را تغییر دهید، باید DataProtectionTokenProviderOptions را پیکربندی کنید.
جمعبندی
ASP.NET Core Identity صرفاً مجموعهای از جداول در دیتابیس نیست؛ بلکه یک اکوسیستم کامل است که بار سنگین امنیت را از دوش توسعهدهنده برمیدارد. از مدیریت ساده کاربران گرفته تا پیادهسازی سیستمهای پیچیده مبتنی بر Claim و APIهای مدرن برای اپلیکیشنهای موبایل و وب، همه چیز در این فریمورک پیشبینی شده است.
فراموش نکنید که امنیت یک مقصد نیست، بلکه یک مسیر است. همیشه پکیجهای خود را بهروز نگه دارید و از آخرین استانداردهای ارائه شده توسط مایکروسافت پیروی کنید.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.