Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Ez a cikk bemutatja, hogyan hozhat létre egyéni hitelesítési állapotszolgáltatót , és hogyan fogadhat felhasználói hitelesítési állapotváltozási értesítéseket kódban.
A kiszolgálóoldali és az ügyféloldali Blazor alkalmazások általános megközelítései hasonlóak, de pontos implementációjukban eltérnek, ezért ez a cikk a kiszolgálóoldali Blazor alkalmazások és az ügyféloldali Blazor alkalmazások között változik. A cikk tetején található kimutatásválasztóval módosíthatja a cikk kimutatását úgy, hogy az megfeleljen a használt projekttípusnak Blazor :
- Kiszolgálóoldali Blazor alkalmazások (Server pivot): Blazor Server a .NET 7 vagy korábbi verzióihoz, valamint a Blazor Web App .NET 8 vagy újabb verzió kiszolgálói projektje.
- Ügyféloldali Blazor alkalmazások (Blazor WebAssembly pivot): Blazor WebAssembly a .NET összes verziójához vagy
.Clienta .NET 8-hoz vagy újabb verziókhoz készült projekthez Blazor Web App.
Absztrakt AuthenticationStateProvider osztály
A Blazor keretrendszer egy absztrakt AuthenticationStateProvider osztályt tartalmaz, amely az aktuális felhasználó hitelesítési állapotával kapcsolatos információkat nyújt a következő tagokkal:
- GetAuthenticationStateAsync: Aszinkron módon lekéri az aktuális felhasználó hitelesítési állapotát.
- AuthenticationStateChanged: Olyan esemény, amely értesítést küld, ha a hitelesítési állapot megváltozott. Ez az esemény például akkor fordulhat elő, ha egy felhasználó bejelentkezik vagy kilép az alkalmazásból.
- NotifyAuthenticationStateChanged: Hitelesítési állapotban módosított eseményt aktivál.
Egyéni AuthenticationStateProvider implementálása
Az alkalmazásnak hivatkoznia kell a Microsoft.AspNetCore.Components.Authorization NuGet-csomagra, amely hitelesítési és engedélyezési támogatást biztosít az alkalmazások számára Blazor .
Megjegyzés:
A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezelésea csomaghasználati munkafolyamatban (NuGet-dokumentáció) című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.
Konfigurálja a következő hitelesítési, engedélyezési és kaszkádolt hitelesítési állapotszolgáltatásokat a Program fájlban.
Amikor az egyik olyan projektsablonból hoz létre Blazor alkalmazást, amelyen engedélyezve van a Blazor hitelesítés, az alkalmazás előre konfigurálva lesz a következő szolgáltatásregisztrációkkal, beleértve a hitelesítési állapot kaszkádolt paraméterként való felfedését is. További információ: ASP.NET Alapszintű Blazor hitelesítés és engedélyezés a cikk Nem engedélyezett tartalom testreszabása az Router összetevő szakaszában található további információval .
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorization();
builder.Services.AddCascadingAuthenticationState();
Hitelesítési és engedélyezési szolgáltatások konfigurálása a Program fájlban.
Amikor az egyik olyan projektsablonból hoz létre Blazor alkalmazást, amelyen engedélyezve van a Blazor hitelesítés, az alkalmazás a következő szolgáltatásregisztrációt tartalmazza.
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorization();
Hitelesítési és engedélyezési szolgáltatások konfigurálása a következőben Startup.ConfigureServicesStartup.cs: .
Amikor az egyik olyan projektsablonból hoz létre Blazor alkalmazást, amelyen engedélyezve van a Blazor hitelesítés, az alkalmazás a következő szolgáltatásregisztrációt tartalmazza.
using Microsoft.AspNetCore.Components.Authorization;
...
services.AddAuthorization();
Alkalmazásokban Blazor WebAssembly (az összes .NET-verzióban) vagy egy .ClientBlazor Web App (.NET 8 vagy újabb) projektben konfigurálja a hitelesítést, az engedélyezést és a kaszkádolt hitelesítési állapotszolgáltatásokat a Program fájlban.
Amikor az egyik olyan projektsablonból hoz létre Blazor alkalmazást, amelyen engedélyezve van a Blazor hitelesítés, az alkalmazás előre konfigurálva lesz a következő szolgáltatásregisztrációkkal, beleértve a hitelesítési állapot kaszkádolt paraméterként való felfedését is. További információ: ASP.NET Alapszintű Blazor hitelesítés és engedélyezés a cikk Nem engedélyezett tartalom testreszabása az Router összetevő szakaszában található további információval .
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorizationCore();
builder.Services.AddCascadingAuthenticationState();
Hitelesítési és engedélyezési szolgáltatások konfigurálása a Program fájlban.
Amikor az egyik olyan projektsablonból hoz létre Blazor alkalmazást, amelyen engedélyezve van a Blazor hitelesítés, az alkalmazás a következő szolgáltatásregisztrációt tartalmazza.
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorizationCore();
Származtasson alosztályt AuthenticationStateProvider, és írjon felül GetAuthenticationStateAsync, hogy létrehozza a felhasználó hitelesítési állapotát. Az alábbi példában minden felhasználó hitelesítése a felhasználónévvel mrfibulitörténik.
CustomAuthStateProvider.cs:
using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
public class CustomAuthStateProvider : AuthenticationStateProvider
{
public override Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity(
[
new Claim(ClaimTypes.Name, "mrfibuli"),
], "Custom Authentication");
var user = new ClaimsPrincipal(identity);
return Task.FromResult(new AuthenticationState(user));
}
}
Megjegyzés:
Az előző kód, amely létrehoz egy újat ClaimsIdentity , egyszerűsített gyűjtemény inicializálását használja, amely a C# 12 -vel (.NET 8) van bevezetve. További információ: Gyűjteménykifejezések – C# nyelvi referencia.
A CustomAuthStateProvider szolgáltatás regisztrálva van a Program fájlban. A hatókörbe tartozó szolgáltatás regisztrálása a következővel AddScoped:
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Blazor Server Egy alkalmazásban regisztrálja a szolgáltatás hatókörétAddScoped a következő hívás :
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Blazor Server Egy alkalmazásban regisztrálja a szolgáltatás hatókörétAddScoped a következő hívás :
services.AddServerSideBlazor();
services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
A CustomAuthStateProvider szolgáltatás regisztrálva van a Program fájlban. A szolgáltatás egyszeri regisztrálása a következővel AddSingleton:
builder.Services.AddSingleton<AuthenticationStateProvider, CustomAuthStateProvider>();
Ha nincs jelen, adjon hozzá egy utasítást @using a _Imports.razor fájlhoz, amely elérhetővé teszi a névteret az Microsoft.AspNetCore.Components.Authorization összetevők között:
@using Microsoft.AspNetCore.Components.Authorization;
Erősítse meg vagy módosítsa az útvonalnézet összetevőjét AuthorizeRouteView a Router komponens meghatározásában. Az összetevő helye az Router alkalmazás típusától függően eltérő. A kereséssel megkeresheti az összetevőt, ha nem tudja, hogy hol található a projektben.
<Router ...>
<Found ...>
<AuthorizeRouteView RouteData="routeData"
DefaultLayout="typeof(Layout.MainLayout)" />
...
</Found>
</Router>
Megjegyzés:
Amikor az egyik olyan projektsablonból hoz létre Blazor alkalmazást, amelyen engedélyezve van a Blazor hitelesítés, az alkalmazás tartalmazza az összetevőt AuthorizeRouteView . További információ: ASP.NET Alapszintű Blazor hitelesítés és engedélyezés a cikk Nem engedélyezett tartalom testreszabása az Router összetevő szakaszában található további információval .
Router Az összetevő helye:
- Erősítse meg vagy módosítsa az útvonalnézet komponensét egy AuthorizeRouteView.
- Erősítse meg vagy adjon hozzá egy CascadingAuthenticationState összetevőt a Router összetevő köré.
Az összetevő helye az Router alkalmazás típusától függően eltérő. A kereséssel megkeresheti az összetevőt, ha nem tudja, hogy hol található a projektben.
<CascadingAuthenticationState>
<Router ...>
<Found ...>
<AuthorizeRouteView RouteData="routeData"
DefaultLayout="typeof(MainLayout)" />
...
</Found>
</Router>
</CascadingAuthenticationState>
Megjegyzés:
Amikor egy olyan projektsablonból hoz létre Blazor alkalmazást, amelynél engedélyezve van a Blazor hitelesítés, az alkalmazás tartalmazza a AuthorizeRouteView és CascadingAuthenticationState összetevőket. További információ: ASP.NET Alapszintű Blazor hitelesítés és engedélyezés a cikk Nem engedélyezett tartalom testreszabása az Router összetevő szakaszában található további információval .
Az alábbi példaösszetevő AuthorizeView a hitelesített felhasználó nevét mutatja be:
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
A használatról AuthorizeViewa ASP.NET Core-hitelesítés Blazor és -engedélyezés című témakörben talál útmutatást.
Hitelesítési állapot változási értesítései
Az egyéni felhasználók AuthenticationStateProvider meghívhatják NotifyAuthenticationStateChanged az AuthenticationStateProvider alaposztályt, hogy értesítsék a felhasználókat a hitelesítési állapot rerenderre történő módosításáról.
Az alábbi példa egy egyéni AuthenticationStateProvider implementálásán alapul a jelen cikk korábbi, Egyéni AuthenticationStateProviderimplementálás szakaszában található útmutatást követve. Ha már követte az ebben a szakaszban szereplő útmutatást, az alábbi CustomAuthStateProvider szöveg helyettesíti a szakaszban láthatót.
Az alábbi CustomAuthStateProvider implementáció egy egyéni metódust tesz elérhetővé, AuthenticateUseramely lehetővé teszi egy felhasználó bejelentkezését, és értesíti a felhasználókat a hitelesítési állapot változásáról.
CustomAuthStateProvider.cs:
using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
public class CustomAuthStateProvider : AuthenticationStateProvider
{
public override Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity();
var user = new ClaimsPrincipal(identity);
return Task.FromResult(new AuthenticationState(user));
}
public void AuthenticateUser(string userIdentifier)
{
var identity = new ClaimsIdentity(
[
new Claim(ClaimTypes.Name, userIdentifier),
], "Custom Authentication");
var user = new ClaimsPrincipal(identity);
NotifyAuthenticationStateChanged(
Task.FromResult(new AuthenticationState(user)));
}
}
Megjegyzés:
Az előző kód, amely létrehoz egy újat ClaimsIdentity , egyszerűsített gyűjtemény inicializálását használja, amely a C# 12 -vel (.NET 8) van bevezetve. További információ: Gyűjteménykifejezések – C# nyelvi referencia.
Egy összetevőben:
- Injektáljuk AuthenticationStateProvider.
- Adjon hozzá egy mezőt a felhasználó azonosítójának tárolásához.
- Adjon hozzá egy gombot és egy metódust, amely átalakítja a AuthenticationStateProvider-t
CustomAuthStateProvider-re, és meghívja aAuthenticateUser-t a felhasználó azonosítójával.
@inject AuthenticationStateProvider AuthenticationStateProvider
<input @bind="userIdentifier" />
<button @onclick="SignIn">Sign in</button>
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
@code {
public string userIdentifier = string.Empty;
private void SignIn()
{
((CustomAuthStateProvider)AuthenticationStateProvider)
.AuthenticateUser(userIdentifier);
}
}
Az előző módszer továbbfejleszthető, hogy egy egyéni szolgáltatáson keresztül aktiválja a hitelesítési állapot változásainak értesítéseit. Az alábbi CustomAuthenticationService osztály egy háttérmezőben (currentUser) tartja fenn az aktuális felhasználó jogcímnevét egy olyan eseménysel (UserChanged) együtt, amelyre a hitelesítési állapot szolgáltatója előfizethet, és amelyre az esemény meghívható NotifyAuthenticationStateChanged. A szakasz későbbi részében található további konfigurációval a CustomAuthenticationService beilleszthető egy olyan összetevőbe, amely logikával állítja be az CurrentUser esemény kiváltását UserChanged.
CustomAuthenticationService.cs:
using System.Security.Claims;
public class CustomAuthenticationService
{
public event Action<ClaimsPrincipal>? UserChanged;
private ClaimsPrincipal? currentUser;
public ClaimsPrincipal CurrentUser
{
get { return currentUser ?? new(); }
set
{
currentUser = value;
if (UserChanged is not null)
{
UserChanged(currentUser);
}
}
}
}
A Program fájlban regisztrálja a CustomAuthenticationService a függőséginjektálási konténerbe.
builder.Services.AddScoped<CustomAuthenticationService>();
Az Startup.ConfigureServicesStartup.cs-ben regisztrálja a CustomAuthenticationService elemet a függőséginjektáló tárolóban.
services.AddScoped<CustomAuthenticationService>();
A Program fájlban regisztrálja a CustomAuthenticationService a függőséginjektálási konténerbe.
builder.Services.AddSingleton<CustomAuthenticationService>();
A következő CustomAuthStateProvider feliratkozik az CustomAuthenticationService.UserChanged eseményre. A GetAuthenticationStateAsync metódus a felhasználó hitelesítési állapotát adja vissza. A hitelesítési állapot kezdetben a CustomAuthenticationService.CurrentUser értékén alapul. Amikor a felhasználó megváltozik, új hitelesítési állapot jön létre az új felhasználó (new AuthenticationState(newUser)) számára a következőre irányuló hívásokhoz GetAuthenticationStateAsync:
using Microsoft.AspNetCore.Components.Authorization;
public class CustomAuthStateProvider : AuthenticationStateProvider
{
private AuthenticationState authenticationState;
public CustomAuthStateProvider(CustomAuthenticationService service)
{
authenticationState = new AuthenticationState(service.CurrentUser);
service.UserChanged += (newUser) =>
{
authenticationState = new AuthenticationState(newUser);
NotifyAuthenticationStateChanged(Task.FromResult(authenticationState));
};
}
public override Task<AuthenticationState> GetAuthenticationStateAsync() =>
Task.FromResult(authenticationState);
}
Az alábbi összetevő metódusa SignIn létrehoz egy jogcímnevet a felhasználó azonosítójának beállításához CustomAuthenticationService.CurrentUser:
@using System.Security.Claims
@inject CustomAuthenticationService AuthService
<input @bind="userIdentifier" />
<button @onclick="SignIn">Sign in</button>
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
@code {
public string userIdentifier = string.Empty;
private void SignIn()
{
var currentUser = AuthService.CurrentUser;
var identity = new ClaimsIdentity(
[
new Claim(ClaimTypes.Name, userIdentifier),
],
"Custom Authentication");
var newUser = new ClaimsPrincipal(identity);
AuthService.CurrentUser = newUser;
}
}
Megjegyzés:
Az előző kód, amely létrehoz egy újat ClaimsIdentity , egyszerűsített gyűjtemény inicializálását használja, amely a C# 12 -vel (.NET 8) van bevezetve. További információ: Gyűjteménykifejezések – C# nyelvi referencia.
További erőforrások
-
Kiszolgálóoldali jogosulatlan tartalommegjelenítés egyéni beállítással
AuthenticationStateProvider -
Hogyan lehet hozzáférni egy
AuthenticationStateProvider-hez, amely egyDelegatingHandleráltalIHttpClientFactory-vel van beállítva - ASP.NET Core biztosítása OpenID Connect (OIDC) használatávalBlazor Web App
- ASP.NET Core védelme Blazor WebAssembly ASP.NET Core Identity
-
Kiszolgálóoldali jogosulatlan tartalommegjelenítés egyéni beállítással
AuthenticationStateProvider -
Hogyan lehet hozzáférni egy
AuthenticationStateProvider-hez, amely egyDelegatingHandleráltalIHttpClientFactory-vel van beállítva - ASP.NET Core biztosítása OpenID Connect (OIDC) használatávalBlazor Web App
- Az ASP.NET Core Blazor WebAssembly védelme az ASP.NET Core-előrendeléssel Identitya üzemeltetett Blazor WebAssembly alkalmazások hitelesítésével