تفاوت Authentication و Authorization در برنامه نو
در Blazor و به طور کلی در برنامههای وب، Authentication و Authorization دو مفهوم مهم و مرتبط با امنیت هستند، اما هر کدام هدف متفاوتی دارند. در زیر تفاوت این دو مفهوم را توضیح میدهیم:
۱. Authentication (احراز هویت)
-
تعریف: فرآیند تأیید هویت کاربر است. یعنی بررسی اینکه کاربر واقعاً چه کسی است و آیا او همان کسی است که ادعا میکند.
-
مثال: ورود به سیستم با نام کاربری و رمز عبور، استفاده از احراز هویت دو مرحلهای (2FA) یا ورود با استفاده از سرویسهای خارجی مانند Google یا Microsoft.
-
در Blazor:
-
از مکانیزمهایی مانند Cookie Authentication، JWT (JSON Web Tokens) یا سرویسهای خارجی مانند Azure AD یا Identity Server برای احراز هویت استفاده میشود.
-
در Blazor Server، احراز هویت معمولاً با کوکیها مدیریت میشود.
-
در Blazor WebAssembly، احراز هویت معمولاً با توکنهای JWT انجام میشود.
۲. Authorization (مجوزدهی)
-
تعریف: فرآیند تعیین دسترسیهای کاربر پس از احراز هویت است. یعنی بررسی اینکه کاربر مجوز دسترسی به یک منبع خاص یا انجام یک عمل خاص را دارد یا نه.
-
مثال: کاربری که وارد سیستم شده است، ممکن است به برخی صفحات یا عملکردهای برنامه دسترسی داشته باشد، اما به برخی دیگر دسترسی نداشته باشد.
-
در Blazor:
-
از سیاستهای مجوز (Policies) و نقشها (Roles) برای مدیریت دسترسیها استفاده میشود.
-
در Blazor Server، میتوان از ویژگیهایی مانند [Authorize]
برای محدود کردن دسترسی به کامپوننتها یا صفحات استفاده کرد.
-
در Blazor WebAssembly، مجوزدهی معمولاً در سمت کلاینت انجام میشود، اما باید در سمت سرور نیز اعتبارسنجی شود تا از امنیت کامل اطمینان حاصل شود.
تفاوت کلیدی:
مثال در Blazor:
-
Authentication:
-
Authorization:
نکات مهم:
-
در Blazor WebAssembly، احراز هویت و مجوزدهی باید هم در سمت کلاینت و هم در سمت سرور اعمال شود تا از امنیت کامل اطمینان حاصل شود.
-
در Blazor Server، احراز هویت و مجوزدهی معمولاً در سمت سرور مدیریت میشود.
ادامه
۱. Authentication (احراز هویت)
هدف:
تأیید اینکه کاربر چه کسی است.
مثال:
فرض کنید یک برنامه Blazor دارید که کاربران باید وارد سیستم شوند تا به برخی صفحات دسترسی داشته باشند. در اینجا مراحل احراز هویت را بررسی میکنیم:
کد نمونه برای احراز هویت در Blazor WebAssembly:
// در Program.cs برای پیکربندی احراز هویت
builder.Services.AddOidcAuthentication(options =>
{
options.ProviderOptions.Authority = "https://your-identity-server.com";
options.ProviderOptions.ClientId = "your-client-id";
options.ProviderOptions.ResponseType = "code";
});
در کامپوننت Blazor:
@page "/login"
@inject NavigationManager Navigation
<button @onclick="Login">ورود به سیستم</button>
@code {
private void Login()
{
Navigation.NavigateTo("authentication/login");
}
}
توضیح:
-
کاربر روی دکمه "ورود به سیستم" کلیک میکند.
-
کاربر به صفحه احراز هویت هدایت میشود و پس از وارد کردن نام کاربری و رمز عبور، هویت او تأیید میشود.
-
اگر احراز هویت موفقیتآمیز باشد، یک توکن JWT یا کوکی ایجاد میشود و کاربر وارد سیستم میشود.
۲. Authorization (مجوزدهی)
هدف:
تعیین اینکه کاربر چه دسترسیهایی دارد.
مثال:
فرض کنید پس از ورود کاربر، برخی صفحات فقط برای کاربران با نقش "Admin" قابل دسترسی باشند. در اینجا مراحل مجوزدهی را بررسی میکنیم:
کد نمونه برای مجوزدهی در Blazor Server:
// در Startup.cs یا Program.cs برای پیکربندی مجوزدهی
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
در کامپوننت Blazor:opy
@page "/admin"
@attribute [Authorize(Roles = "Admin")]
<h3>صفحه مدیریت</h3>
<p>این صفحه فقط برای مدیران قابل دسترسی است.</p>
@code {
// منطق مربوط به صفحه
}
توضیح:
-
کاربری که وارد سیستم شده است، سعی میکند به صفحه /admin
دسترسی پیدا کند.
-
سیستم بررسی میکند که آیا کاربر نقش "Admin" دارد یا نه.
-
اگر کاربر نقش "Admin" داشته باشد، صفحه نمایش داده میشود؛ در غیر این صورت، به صفحه "دسترسی غیرمجاز" هدایت میشود.
۳. تفاوت Authentication و Authorization در عمل
سناریو:
-
کاربری با نام "Ali" وارد سیستم میشود (احراز هویت).
-
پس از ورود، Ali سعی میکند به صفحه "مدیریت کاربران" دسترسی پیدا کند.
-
سیستم بررسی میکند که آیا Ali نقش "Admin" دارد یا نه (مجوزدهی).
کد ترکیبی:
@page "/manage-users"
@attribute [Authorize(Roles = "Admin")]
<h3>مدیریت کاربران</h3>
<p>این صفحه فقط برای مدیران قابل دسترسی است.</p>
@code {
// منطق مربوط به صفحه
}
توضیح:
-
Authentication: سیستم تأیید میکند که Ali واقعاً Ali است (با نام کاربری و رمز عبور).
-
Authorization: سیستم بررسی میکند که آیا Ali نقش "Admin" دارد یا نه. اگر دارد، به صفحه دسترسی پیدا میکند؛ در غیر این صورت، دسترسی رد میشود.
۴. صفحه "دسترسی غیرمجاز"
اگر کاربری بدون مجوز لازم سعی کند به صفحهای دسترسی پیدا کند، میتوانید یک صفحه "دسترسی غیرمجاز" ایجاد کنید:
@page "/access-denied"
<h3>دسترسی غیرمجاز</h3>
<p>شما مجوز دسترسی به این صفحه را ندارید.</p>
۵. نکات مهم
-
Blazor Server: احراز هویت و مجوزدهی معمولاً در سمت سرور انجام میشود.
-
Blazor WebAssembly: احراز هویت و مجوزدهی در سمت کلاینت انجام میشود، اما باید در سمت سرور نیز اعتبارسنجی شود تا از امنیت کامل اطمینان حاصل شود.
-
همیشه از HTTPS برای انتقال اطلاعات حساس مانند توکنها و کوکیها استفاده کنید.
اگر سوال بیشتری دارید یا به مثالهای دیگری نیاز دارید، خوشحال میشوم کمک کنم! 😊