تفاوت احراز هویت و دسترسی در بلیزور

تفاوت Authentication و Authorization در برنامه نو

توسط admin | گروه برنامه نویسی BLAZOR | 1403/12/15

نظرات 0

 در 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، مجوزدهی معمولاً در سمت کلاینت انجام می‌شود، اما باید در سمت سرور نیز اعتبارسنجی شود تا از امنیت کامل اطمینان حاصل شود.


تفاوت کلیدی:

  • Authentication: پاسخ به سؤال "شما چه کسی هستید؟" (تأیید هویت کاربر).

  • Authorization: پاسخ به سؤال "آیا شما مجوز انجام این کار را دارید؟" (تعیین دسترسی‌ها).


مثال در Blazor:

  1. Authentication:

    • کاربر با نام کاربری و رمز عبور وارد سیستم می‌شود.

    • سیستم هویت کاربر را تأیید می‌کند و یک توکن JWT یا کوکی ایجاد می‌کند.

  2. Authorization:

    • کاربر می‌خواهد به صفحه "مدیریت کاربران" دسترسی پیدا کند.

    • سیستم بررسی می‌کند که آیا کاربر نقش "Admin" دارد یا نه. اگر دارد، اجازه دسترسی می‌دهد؛ در غیر این صورت، دسترسی رد می‌شود.


نکات مهم:

  • در 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 {
 
// منطق مربوط به صفحه
 
}
توضیح:
  1. Authentication: سیستم تأیید می‌کند که Ali واقعاً Ali است (با نام کاربری و رمز عبور).

  2. Authorization: سیستم بررسی می‌کند که آیا Ali نقش "Admin" دارد یا نه. اگر دارد، به صفحه دسترسی پیدا می‌کند؛ در غیر این صورت، دسترسی رد می‌شود.


۴. صفحه "دسترسی غیرمجاز"

اگر کاربری بدون مجوز لازم سعی کند به صفحه‌ای دسترسی پیدا کند، می‌توانید یک صفحه "دسترسی غیرمجاز" ایجاد کنید:



@page "/access-denied"
<h3>دسترسی غیرمجاز</h3>
<p>شما مجوز دسترسی به این صفحه را ندارید.</p>

۵. نکات مهم

  • Blazor Server: احراز هویت و مجوزدهی معمولاً در سمت سرور انجام می‌شود.

  • Blazor WebAssembly: احراز هویت و مجوزدهی در سمت کلاینت انجام می‌شود، اما باید در سمت سرور نیز اعتبارسنجی شود تا از امنیت کامل اطمینان حاصل شود.

  • همیشه از HTTPS برای انتقال اطلاعات حساس مانند توکن‌ها و کوکی‌ها استفاده کنید.


اگر سوال بیشتری دارید یا به مثال‌های دیگری نیاز دارید، خوشحال می‌شوم کمک کنم! 😊

 

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620