معرفی
احراز هویت و مجوز رایج ترین الزامات اکثر برنامه ها هستند. احراز هویت یک فرآیند اعتبارسنجی کاربران است و مجوز یک فرآیند اعتبارسنجی حق دسترسی کاربران برای دسترسی به منابع برنامه است. Blazor از مدل امنیتی هسته ASP.NET برای ارائه احراز هویت و مجوز استفاده می کند. هم برنامه سرور Blazor و هم برنامه مشتری (WebAssembly) سناریوهای امنیتی مختلفی دارند زیرا برنامه سرور Blazor از منبع سرور برای ارائه مجوز استفاده می کند و برنامه مشتری Blazor (WebAssembly) روی مشتری اجرا می شود. از این رو مجوز فقط مشخص می شود که کدام گزینه UI می تواند توسط کاربر قابل دسترسی باشد.
احراز هویت
Blazor سمت سرور از مکانیسم های احراز هویت ASP.NET Core استفاده می کند. Blazor سمت سرور از SignalR برای اتصال بلادرنگ بین سرور و UI استفاده می کند. بنابراین، SignalR احراز هویت را در اتصال برقرار می کند. هنگام ایجاد برنامه، گزینه ای برای فعال کردن احراز هویت برای برنامه Blazor وجود دارد.
برای فعال کردن احراز هویت برای برنامه سرور Blazor، بر روی "تغییر" در قسمت "Authentication" کلیک کنید و گزینه "Individual User Accounts" را انتخاب کنید و سپس هنگام ایجاد یک برنامه سرور Blazor جدید، روی دکمه "Ok" کلیک کنید.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/CreatenewAppBlazor.png)
عضویت در ASP.NET Core Identity رابط کاربری را برای عملکردهای ورود و ثبت نام فراهم می کند و برنامه سرور Blazor از مکانیسم های احراز هویت ASP.NET Core استفاده می کند، از این رو این رابط های کاربری با برنامه سرور Blazor نیز در دسترس هستند. عضویت هویت همچنین اعتبار سنجی ورود خارجی مانند Google، Microsoft، Facebook و غیره را فراهم می کند. در اینجا، اعتبار ورود به سیستم در برابر احراز هویت شخص ثالث تأیید می شود.
هنگامی که برنامه سرور Blazor را اجرا می کنید، می توانید گزینه ثبت نام و ورود به سیستم را در گوشه سمت راست بالا پیدا کنید. سرور هویت به طور پیش فرض از پایگاه داده سرور SQL استفاده می کند. قالب ویژوال استودیو یک رشته اتصال پیشفرض فایل appsettings.json ایجاد میکند.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/registrationloginBlazorserverapp.png)
هنگامی که روی پیوند "ثبت نام" کلیک می کنید، رابط کاربری پیش فرض صفحه ثبت نام را باز می کند. صفحه ثبت نام و ورود به سیستم به طور پیش فرض با میان افزار عضویت هویت ارائه شده است. آنها اجزای Blazor نیستند بلکه اجزای تیغ هستند. با استفاده از کد زیر در متد ConfigureServices صفحات پیش فرض تزریق می شوند.
- public void ConfigureServices(IServiceCollection services)
- {
- …
- services.AddDefaultIdentity()
- …
- }
شما می توانید صفحات (یا اجزای) سفارشی را برای ثبت نام ایجاد کنید و وارد شوید و به میان افزار هویت تزریق کنید.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/registration.png)
هنگامی که برای اولین بار به صفحات عضویت دسترسی پیدا می کنید و پایگاه داده راه اندازی نمی شود، سیستم درخواست مهاجرت می کند. مهاجرت جداول مختلف و رویه های ذخیره شده مربوط به مدیریت کاربر و نقش را ایجاد می کند.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/migration.png)
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/db.png)
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/output.png)
سرویس AuthenticationStateProvider
برنامه سرور Blazor سرویس AuthenticationStateProvider را ارائه می دهد که به ما کمک می کند تا داده های وضعیت احراز هویت کاربر را از HttpContext.User پیدا کنیم. این سرویس توسط مؤلفه CascadingAuthenticationState و AuthorizeView برای دریافت وضعیت های احراز هویت استفاده می شود. میتوانید از این سرویس در کد خود استفاده کنید، اما توصیه نمیشود، زیرا زمانی که دادههای وضعیت احراز هویت تغییر میکند، بهطور خودکار اطلاعرسانی نمیکند.
در کد مثال زیر، AuthenticationStateProvider کاربر را از HttpContext.User هسته ASP.net بازیابی می کند و وضعیت احراز هویت کاربر را بررسی می کند. اگر کاربر احراز هویت شود، ادعاهای کاربر را واکشی می کند:
- @page "/"
- @using Microsoft.AspNetCore.Components.Authorization
- @inject AuthenticationStateProvider AuthenticationStateProvider
-
Hello, world!
- Welcome to your new app.
- @userAuthenticated
-
- @code{
- string userAuthenticated;
- protected override async Task OnInitializedAsync()
- {
- var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
- var user = authState.User;
- if (user.Identity.IsAuthenticated)
- {
- userAuthenticated = $"{ user.Identity.Name} is authenticated.";
- }
- else
- {
- userAuthenticated = "The user is NOT authenticated.";
- }
- }
- }
- …
- …
با استفاده از ویژگی user.Identity.IsAuthenticated، می توانید بررسی کنید که آیا کاربر احراز هویت شده است (اگر روی true تنظیم شده باشد) یا خیر. برنامه سرور Blazor روی سرور اجرا می شود، بنابراین می تواند اطلاعات فعلی کاربر را از سرور واکشی کند اما با برنامه Blazor کلاینت (WebAssembly) امکان پذیر نیست.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/understand-basic-of-authentication-in-blazor-server-app/Images/beforeafterlogin.png)
سفارشی AuthenticationStateProvider
سرویس AuthenticationStateProvider یک سرویس داخلی در برنامه سرور Blazor است که به شما کمک می کند تا داده های وضعیت احراز هویت را از HttpContext.User به دست آورید. همچنین می توانید AuthenticationStateProvider سفارشی ایجاد کنید. یک سناریوی نادر وجود دارد که در آن شما نیاز به ایجاد AuthenticationStateProvider سفارشی دارید. همچنین، توصیه نمی شود زیرا آسیب پذیری های امنیتی را به برنامه شما اضافه می کند.
- using Microsoft.AspNetCore.Components.Authorization;
- using System.Security.Claims;
- using System.Threading.Tasks;
- namespace AuthenticationBlazorApp.Provider
- {
- public class CustomAuthenticationStateProvider : AuthenticationStateProvider
- {
- public override Task GetAuthenticationStateAsync()
- {
- var identity = new ClaimsIdentity(new[]
- {
- new Claim(ClaimTypes.Name, "testUser"),
- }, "TestUser authentication type");
- var user = new ClaimsPrincipal(identity);
- return Task.FromResult(new AuthenticationState(user));
- }
- }
- }