ASP.NET Core Blazor hitelesítése és engedélyezése
Jegyzet
Ez nem a cikk legújabb verziója. Az aktuális kiadást lásd ebben a cikk .NET 9-es verziója.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. Az aktuális kiadást lásd ebben a cikk .NET 9-es verziója.
Fontos
Ezek az információk egy olyan előzetes termékre vonatkoznak, amelyet a kereskedelmi forgalomba kerülés előtt jelentősen módosíthatnak. A Microsoft nem vállal kifejezett vagy hallgatólagos szavatosságot az itt megadott információkra vonatkozóan.
Az aktuális kiadást lásd ebben a cikk .NET 9-es verziója.
Ez a cikk ASP.NET Core Blazor-alkalmazások biztonsági konfigurációjának és felügyeletének támogatását ismerteti.
Blazor a meglévő ASP.NET Core hitelesítési mechanizmusokkal hozza létre a felhasználó identitását. A pontos mechanizmus attól függ, hogy a Blazor alkalmazás hogyan üzemel, kiszolgálóoldali vagy ügyféloldali.
A biztonsági forgatókönyvek eltérnek a kiszolgálóoldalon futó és ügyféloldalon futó engedélyezési kód esetében a Blazor alkalmazásokban. A kiszolgálón futó engedélyezési kódok esetében az engedélyezési ellenőrzések képesek az alkalmazás és az összetevők területeire vonatkozó hozzáférési szabályok kikényszerítésére. Mivel az ügyféloldali kódvégrehajtás módosítható, az ügyfélen végrehajtott engedélyezési kód nem megbízható a hozzáférési szabályok teljes körű kikényszerítéséhez vagy az ügyféloldali tartalom megjelenítésének szabályozásához.
Ha az engedélyezési szabály érvényesítését garantálni kell, ne hajtsa végre az engedélyezési ellenőrzéseket az ügyféloldali kódban. Hozzon létre egy Blazor Web App, amely csak a kiszolgálóoldali renderelésre (SSR) támaszkodik az engedélyezési ellenőrzésekhez és a szabályérvényesítéshez.
Ha az engedélyezési szabályok betartatását, valamint az adatok és kódok biztonságát garantálni kell, ne dolgozzon ki ügyféloldali alkalmazást. Blazor Server-alkalmazás létrehozása.
Razor Lapok engedélyezési konvenciói nem vonatkoznak a kiszolgálható Razor komponensekre. Ha egy nem módosítható Razor összetevő beágyazott egy Razor Pages-alkalmazáslapjára, az oldal engedélyezési konvenciói közvetetten befolyásolják a Razor összetevőt, valamint a lap többi tartalmát.
ASP.NET Core Identity a HTTP kérés- és válaszkommunikáció kontextusában működik, amely általában nem az Blazor alkalmazás ügyfél-kiszolgáló kommunikációs modellje. ASP.NET Core alkalmazások, amelyek az ASP.NET Core Identity-t használják felhasználókezeléshez, a Razor-hoz kapcsolódó felhasználói felülethez használjanak Razor lapokat a Identity összetevők helyett, például a felhasználói regisztráció, bejelentkezés, kijelentkezés és egyéb felhasználókezelési feladatok esetén. A Razor feladatokat közvetlenül kezelő Identity összetevők létrehozása több forgatókönyv esetében is lehetséges, de a Microsoft nem javasolja vagy támogatja.
ASP.NET alapvető absztrakciók, például SignInManager<TUser> és UserManager<TUser>nem támogatottak Razor összetevőkben. Az ASP.NET Core IdentityBlazorhasználatával kapcsolatos további információkért lásd: Scaffold ASP.NET Core Identity kiszolgálóoldali Blazor alkalmazásba.
Jegyzet
A cikkben szereplő példakódok null értékű referenciatípusokat (NRT-ket) és .NET-fordító nullállapotú statikus elemzésivezetnek be, amelyeket a .NET 6-os vagy újabb verziójú ASP.NET Core támogat. Ha ASP.NET Core 5.0-s vagy korábbi verziójára céloz, távolítsa el a null típusú megjelölést (?
) a jelen cikkben szereplő példákból.
Bizalmas adatok és hitelesítő adatok biztonságos karbantartása
Ne tárolja az alkalmazás titkos kulcsait, kapcsolati sztringeket, hitelesítő adatokat, jelszavakat, személyes azonosítószámokat (PIN-eket), titkos .NET/C#-kódot vagy titkos kulcsokat/jogkivonatokat az ügyféloldali kódban, amely mindig nem biztonságos. Az ügyféloldali Blazor kódnak egy ön által felügyelt biztonságos webes API-val kell hozzáférnie a biztonságos szolgáltatásokhoz és adatbázisokhoz.
Tesztelési/előkészítési és éles környezetekben a kiszolgálóoldali Blazor kód- és webes API-knak biztonságos hitelesítési folyamatokat kell használniuk, amelyek nem őrzik meg a hitelesítő adatokat a projektkódban vagy a konfigurációs fájlokban. A helyi fejlesztési tesztelésen kívül javasoljuk, hogy kerülje a környezeti változók bizalmas adatok tárolására való használatát, mivel a környezeti változók nem a legbiztonságosabb megközelítések. A helyi fejlesztési teszteléshez a Secret Manager eszköz ajánlott bizalmas adatok védelméhez. További információ:
- Biztonságos hitelesítési folyamatok (ASP.NET Alapdokumentáció)
- Microsoft Azure-szolgáltatások felügyelt identitásai (ez a cikk)
Ügyféloldali és kiszolgálóoldali helyi fejlesztéshez és teszteléshez használja a Secret Manager eszközt a bizalmas hitelesítő adatok védelméhez.
Felügyelt identitások a Microsoft Azure-szolgáltatásokhoz
A Microsoft Azure-szolgáltatások esetében felügyelt identitások használatát javasoljuk. A felügyelt identitások biztonságosan hitelesíthetők az Azure-szolgáltatásokban anélkül, hogy hitelesítő adatokat tárolnak az alkalmazáskódban. További információ:
- Mik az Azure-erőforrások felügyelt identitásai? (A Microsoft Entra dokumentációja)
- Az Azure-szolgáltatások dokumentációja
Hamisítás elleni támogatás
A Blazor sablon:
- Az antiforgery szolgáltatásokat automatikusan hozzáadja, amikor a AddRazorComponents meg van hívva a
Program
fájlban. - Hozzáadja az Antiforgery Middleware-t úgy, hogy meghívja UseAntiforgery a kérésfeldolgozó folyamatában a
Program
fájlban, és végponti antiforgery védelmi igényel a helyek közötti kérelemhamisítás (CSRF/XSRF) veszélyeinek enyhítéséhez. UseAntiforgery UseHttpsRedirectionután kerül meghívásra. A UseAntiforgery hívását a UseAuthentication és UseAuthorizationhívása után kell kezdeményezni, amennyiben azok megtörténtek.
A AntiforgeryToken összetevő rejtett mezőként jeleníti meg az antiforgery tokent, és ezt az összetevőt automatikusan hozzáadják a form (EditForm) példányaihoz. További információért lásd: ASP.NET Core Blazor űrlapok áttekintése.
A AntiforgeryStateProvider szolgáltatás hozzáférést biztosít az aktuális munkamenethez társított antiforgery tokenhez. Injektálja a szolgáltatást, és hívja meg a GetAntiforgeryToken() metódust az aktuális AntiforgeryRequestTokenmegszerzéséhez. További információ: Webes API meghívása egy ASP.NET Core Blazor-alkalmazásból.
Blazor a kéréstokeneket az összetevő állapotban tárolja, ami garantálja, hogy a hamisítás elleni tokenek elérhetők legyenek az interaktív összetevők számára, még akkor is, ha nincs hozzáférésük a kéréshez.
Jegyzet
Antiforgery kárenyhítési csak akkor szükséges, ha application/x-www-form-urlencoded
, multipart/form-data
vagy text/plain
kódolt űrlapadatokat küld a kiszolgálónak, mivel ezek az csak érvényes űrlap-enctípusok.
További információ:
- Helyek közötti hamisítás (XSRF/CSRF) támadások megakadályozása ASP.NET Core: Ez a cikk az elsődleges ASP.NET Core-cikk, amely a kiszolgálóoldali Blazor Server, a Blazor Web Apps kiszolgálóprojektje és Blazor MVC/Razor Pages-integrációra vonatkozik.
- ASP.NET Alapvető Blazor űrlapok áttekintése: A cikk Antiforgery támogatási szakasza Blazor űrlapok antiforgery támogatására vonatkozik.
Kiszolgálóoldali Blazor hitelesítés
A kiszolgálóoldali Blazor alkalmazások ugyanúgy vannak konfigurálva a biztonság érdekében, mint ASP.NET Core-alkalmazások. További információ: ASP.NET Alapvető biztonsági témakörök.
A hitelesítési környezet csak az alkalmazás indításakor jön létre, vagyis amikor az alkalmazás először csatlakozik a WebSockethez egy SignalR kapcsolaton keresztül, az ügyféllel. A hitelesítés egy cookie vagy más hozzáférési jogkivonaton alapulhat, de a hitelesítés a SignalR hubon keresztül és teljes egészében a áramkörön belül. A hitelesítési környezet az áramkör teljes élettartama alatt megmarad. Az alkalmazások 30 percenként rendszeresen újraértékelik a felhasználó hitelesítési állapotát.
Ha az alkalmazásnak egyéni szolgáltatásokhoz kell rögzítenie a felhasználókat, vagy reagálnia kell a felhasználó frissítésére, tekintse meg ASP.NET Core kiszolgálóoldali és Blazor Web App további biztonsági forgatókönyveket.
Blazor különbözik a hagyományos kiszolgáló által renderelt webalkalmazásoktól, amelyek minden oldalnavigáción cookie-kkal új HTTP-kéréseket tesznek. A rendszer ellenőrzi a hitelesítést a navigációs események során. A cookie-k azonban nem érintettek. A cookie-kat csak akkor küldi el a rendszer, ha HTTP-kérést küld egy kiszolgálónak, ami nem történik meg, amikor a felhasználó egy Blazor alkalmazásban navigál. A navigáció során a rendszer ellenőrzi a felhasználó hitelesítési állapotát a Blazor kapcsolatcsoporton belül, amelyet bármikor frissíthet a kiszolgálón az RevalidatingAuthenticationStateProvider
absztrakcióshasználatával.
Fontos
Nem ajánlott egyéni NavigationManager
implementálni a hitelesítés ellenőrzéséhez a navigáció során. Ha az alkalmazásnak egyéni hitelesítési állapotlogikát kell végrehajtania a navigáció során, használjon egy egyedi AuthenticationStateProvider
.
Jegyzet
A cikkben szereplő példakódok null értékű referenciatípusokat (NRT-ket) és .NET-fordító nullállapotú statikus elemzésivezetnek be, amelyeket a .NET 6-os vagy újabb verziójú ASP.NET Core támogat. Ha ASP.NET Core 5.0-s vagy korábbi verziójára céloz, távolítsa el a null típusú megjelölést (?
) a jelen cikkben szereplő példákból.
A beépített vagy egyéni AuthenticationStateProvider szolgáltatás az ASP.NET Core HttpContext.User-től szerzi meg a hitelesítési állapotadatokat. A hitelesítési állapot így integrálható a meglévő ASP.NET Core hitelesítési mechanizmusokkal.
További információ a kiszolgálóoldali hitelesítésről: ASP.NET Core Blazor hitelesítés és engedélyezés.
Megosztott állapot
A kiszolgálóoldali Blazor alkalmazások a kiszolgáló memóriájában élnek, és több alkalmazás-munkamenet is ugyanazon a folyamaton belül fut. Az egyes alkalmazás-munkamenetek során Blazor egy saját függőséginjektáló tárolóval indít el egy kört, így a hatókörön belüli szolgáltatások Blazor munkamenetenként egyediek.
Figyelmeztetés
Nem javasoljuk, hogy az azonos kiszolgálói megosztási állapotban lévő alkalmazások egyszeri szolgáltatásokat használjanak, kivéve, ha különös figyelmet igényelnek, mivel ez biztonsági réseket okozhat, például kiszivárogtathatja a felhasználói állapotot a kapcsolatcsoportok között.
Az állapotalapú egyszeri szolgáltatásokat Blazor alkalmazásokban is használhatja, ha kifejezetten erre tervezték őket. Az egytonos memóriagyorsítótár használata például elfogadható, mert a memória-gyorsítótárnak kulcsra van szüksége egy adott bejegyzés eléréséhez. Feltéve, hogy a felhasználók nem irányítják a gyorsítótárban használt gyorsítótárkulcsokat, a gyorsítótárban tárolt állapot nem szivárog ki a kapcsolatcsoportok között.
Az állapotkezeléssel kapcsolatos általános útmutatásért lásd: ASP.NET Core Blazor állapotkezelési.
Bizalmas adatok és hitelesítő adatok kiszolgálóoldali biztonsága
Tesztelési/előkészítési és éles környezetekben a kiszolgálóoldali Blazor kód- és webes API-knak biztonságos hitelesítési folyamatokat kell használniuk, amelyek nem őrzik meg a hitelesítő adatokat a projektkódban vagy a konfigurációs fájlokban. A helyi fejlesztési tesztelésen kívül javasoljuk, hogy kerülje a környezeti változók bizalmas adatok tárolására való használatát, mivel a környezeti változók nem a legbiztonságosabb megközelítések. A helyi fejlesztési teszteléshez a Secret Manager eszköz ajánlott bizalmas adatok védelméhez. További információ:
- Biztonságos hitelesítési folyamatok (ASP.NET Alapdokumentáció)
- Felügyelt identitások a Microsoft Azure-szolgáltatásokhoz (Blazor dokumentáció)
Ügyféloldali és kiszolgálóoldali helyi fejlesztéshez és teszteléshez használja a Secret Manager eszközt a bizalmas hitelesítő adatok védelméhez.
Projektsablon
Hozzon létre egy új kiszolgálóoldali Blazor alkalmazást az Tooling for ASP.NET Core Blazorcímű témakörben található útmutatást követve.
A kiszolgálóoldali alkalmazássablon kiválasztása és a projekt konfigurálása után válassza ki az alkalmazás hitelesítését Hitelesítési típus:
- Nincs (alapértelmezett): Nincs hitelesítés.
- egyéni fiókok: A felhasználói fiókok az alkalmazásban vannak tárolva a ASP.NET Core Identityhasználatával.
- Nincs (alapértelmezett): Nincs hitelesítés.
- egyéni fiókok: A felhasználói fiókok az alkalmazásban vannak tárolva a ASP.NET Core Identityhasználatával.
- Microsoft identitásplatform: További információkért lásd: ASP.NET Core Blazor hitelesítés és engedélyezés.
- Windows: Windows-hitelesítés használata.
Blazor Identity felhasználói felület (egyéni fiókok)
Blazor támogatja a teljes Blazoralapú Identity felhasználói felület létrehozását, amikor a egyéni fiókokhitelesítési lehetőséget választja.
A Blazor Web App sablon egy SQL Server-adatbázis Identity kódját tartalmazza. A parancssori verzió SQLite-t használ, és tartalmaz egy SQLite-adatbázist a(z) Identityszámára.
A sablon:
- Támogatja az interaktív kiszolgálóoldali renderelést (interaktív SSR) és ügyféloldali renderelési (CSR) forgatókönyveket hitelesített felhasználókkal.
- Hozzáadja IdentityRazor összetevőket és a kapcsolódó logikát a rutinhitelesítési feladatokhoz, például a felhasználók be- és kijelentkeztetéséhez. A Identity összetevők olyan speciális Identity funkciókat is támogatnak, mint például a fiók megerősítése és a jelszó-helyreállítási, valamint többtényezős hitelesítés külső alkalmazással. Vegye figyelembe, hogy maguk a Identity összetevők nem támogatják az interaktivitást.
- Hozzáadja a Identitykapcsolódó csomagokat és függőségeket.
- A Identity
_Imports.razor
csomagjaira hivatkozik. - Létrehoz egy egyéni felhasználói Identity osztályt (
ApplicationUser
). - Létrehoz és regisztrál egy EF Core adatbázis-környezetet (
ApplicationDbContext
). - A beépített Identity végpontok útválasztását konfigurálja.
- Identity érvényesítési és üzleti logikát tartalmaz.
A
Amikor az Interaktív WebAssembly vagy az Interaktív automatikus renderelési módot választja, a kiszolgáló kezeli az összes hitelesítési és engedélyezési kérést, és a Identity összetevők statikusan jelennek meg a kiszolgálón a Blazor Web Appfő projektjében.
A keretrendszer egy egyéni AuthenticationStateProvider-t biztosít mind a kiszolgáló-, mind az ügyfélprojektekben (.Client
), hogy továbbítja a felhasználó hitelesítési állapotát a böngészőbe. A kiszolgálóprojekt meghívja AddAuthenticationStateSerialization
, míg az ügyfélprojekt AddAuthenticationStateDeserialization
. Az ügyfél helyett a kiszolgálón történő hitelesítés lehetővé teszi az alkalmazás számára a hitelesítési állapot elérését az előrendelés során és a .NET WebAssembly futtatókörnyezet inicializálása előtt. Az egyéni AuthenticationStateProvider-implementációk az Állandó összetevő állapota szolgáltatás (PersistentComponentState) használatával szerializálják a hitelesítési állapotot HTML-megjegyzésekbe, majd a WebAssemblyből olvassák vissza egy új AuthenticationState-példány létrehozásához. További információ: Hitelesítési állapot kezelése Blazor Web App szakaszában.
Csak interaktív kiszolgálói megoldások esetén IdentityRevalidatingAuthenticationStateProvider
(referenciaforrás) egy kiszolgálóoldali AuthenticationStateProvider, amely 30 percenként újraellenőrzi a csatlakoztatott felhasználó biztonsági pecsétjét, amikor egy interaktív kapcsolat van létrehozva.
Amikor az Interaktív WebAssembly vagy az Interaktív automatikus renderelési módot választja, a kiszolgáló kezeli az összes hitelesítési és engedélyezési kérést, és a Identity összetevők statikusan jelennek meg a kiszolgálón a Blazor Web Appfő projektjében. A projektsablon tartalmaz egy PersistentAuthenticationStateProvider
osztályt (referenciaforrást) a .Client
projektben a felhasználó hitelesítési állapotának szinkronizálásához a kiszolgáló és a böngésző között. Az osztály a AuthenticationStateProvideregyéni implementációja. A szolgáltató az Állandó összetevő állapota szolgáltatás (PersistentComponentState) használatával előrerendeli a hitelesítési állapotot, és megőrzi azt a lapon.
Egy Blazor Web Appfő projektjében a hitelesítési állapotszolgáltató neve IdentityRevalidatingAuthenticationStateProvider
(referenciaforrás) (csak kiszolgáló interaktivitási megoldásai) vagy PersistingRevalidatingAuthenticationStateProvider
(referenciaforrás) (WebAssembly vagy Automatikus interaktivitási megoldások).
A globális interaktív renderelési módok nemIdentity összetevőkre való alkalmazásáról, valamint a statikus SSR kényszerítéséről az Identity-összetevőkhöz, lásd ASP.NET Core Blazor renderelési módokat.
Az előrerendelt állapot megőrzéséről további információt Prerender ASP.NET Core Razor-összetevőkcímű cikkben talál.
Jegyzet
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltása legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Hitelesítési állapot kezelése Blazor Web Apps-ben
Ez a szakasz a következő Blazor Web App-re vonatkozik:
- Egyéni fiókok
- ügyféloldali renderelés (CSR, WebAssembly-alapú interaktivitás).
Az ügyféloldali hitelesítési állapotszolgáltató csak a Blazor belül használható, és nem integrálva van a ASP.NET Core hitelesítési rendszerrel. Az előrendelés során Blazor tiszteletben tartja a lapon definiált metaadatokat, és a ASP.NET Core hitelesítési rendszer használatával állapítja meg, hogy a felhasználó hitelesítése megtörtént-e. Amikor egy felhasználó egyik oldalról a másikra navigál, a rendszer ügyféloldali hitelesítésszolgáltatót használ. Amikor a felhasználó frissíti a lapot (teljes oldal újrabetöltése), az ügyféloldali hitelesítési állapotszolgáltató nem vesz részt a kiszolgáló hitelesítési döntésében. Mivel a kiszolgáló nem őrzi meg a felhasználó állapotát, az ügyféloldalon tárolt hitelesítési állapot elveszik.
Ennek megoldásához a legjobb módszer a hitelesítés végrehajtása a ASP.NET Core hitelesítési rendszeren belül. Az ügyféloldali hitelesítési állapotszolgáltató csak a felhasználó hitelesítési állapotát tükrözi. A hitelesítési állapotszolgáltatókkal való végrehajtására vonatkozó példákat a Blazor Web App projektsablon szemlélteti, és az alábbiakban ismertetjük.
A kiszolgálóprojekt Program
fájljában hívja meg a AddAuthenticationStateSerialization
-t, amely szerializálja a kiszolgálóoldali AuthenticationState által visszaadott AuthenticationStateProvider-t az Állandó Összetevő Állapota szolgáltatás (PersistentComponentState) segítségével:
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents()
.AddAuthenticationStateSerialization();
Az API csak a kiszolgálóoldali nevet és a szerepkör-jogcímeket szerializálja a böngészőben való hozzáféréshez. Az összes jogcím belefoglalásához állítsa SerializeAllClaims
értékét true
-re a AddAuthenticationStateSerialization
kiszolgálóoldali hívásában.
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents()
.AddAuthenticationStateSerialization(
options => options.SerializeAllClaims = true);
Az ügyfél (.Client
) projektjének Program
fájljában hívja meg a AddAuthenticationStateDeserialization
-t, amely hozzáad egy AuthenticationStateProvider-at, ahol a AuthenticationState deszerializálódik a szerverről a AuthenticationStateData
használatával és a Komponens Állapot Szolgáltatással (PersistentComponentState). A kiszolgálóprojektben megfelelő hívás van AddAuthenticationStateSerialization
-ra.
builder.Services.AddAuthorizationCore();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddAuthenticationStateDeserialization();
PersistingRevalidatingAuthenticationStateProvider
(referenciaforrás): Az interaktív kiszolgálóoldali renderelést (interaktív SSR) és ügyféloldali renderelést (CSR) alkalmazó Blazor Web Appesetében. Ez egy szerveroldali AuthenticationStateProvider, amely 30 percenként újraellenőrzi a csatlakoztatott felhasználó biztonsági pecsétjét, amikor egy interaktív áramkör csatlakoztatva van. Emellett az Állandó összetevő állapota szolgáltatás használatával továbbítja a hitelesítési állapotot az ügyfélhez, amely aztán a CSR élettartama alatt rögzített marad.PersistingServerAuthenticationStateProvider
(referenciaforrás): Olyan Blazor Web Appesetében, amelyek csak CSR-t fogadnak el. Ez egy szerveroldali AuthenticationStateProvider, amely az Állandó összetevő állapot szolgáltatás-t használja a hitelesítési állapot átadására az ügyfélnek, és amelyet a CSR élettartama alatt rögzítenek.PersistentAuthenticationStateProvider
(referenciaforrás): CSR-t alkalmazó Blazor Web Appesetén. Ez egy ügyféloldali AuthenticationStateProvider, amely meghatározza a felhasználó hitelesítési állapotát úgy, hogy a kiszolgálón való megjelenítéskor a lapon tárolt adatokat keresi. Ez a hitelesítési állapot a CSR élettartamára van rögzítve. Ha a felhasználónak be kell jelentkeznie vagy ki kell jelentkeznie, teljes oldalú újrabetöltésre van szükség. Ez csak megjelenítendő felhasználónevet és e-mail-címet biztosít. Nem tartalmaz olyan tokeneket, amelyek a kiszolgálóhoz történő hitelesítésre szolgálnak a későbbi kérésekhez; ezeket külön kezelik, amikor a cookie részeként benne foglaltatnak a szervernek címzettHttpClient
kérésekben.
Jegyzet
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltása legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Állványzat Identity
További információért arról, hogyan alapozható meg a Identity egy kiszolgálóoldali Blazor alkalmazásban, lásd: Állománygenerálás az ASP.NET Core-projektekben Identity.
Állványzat Identity kiszolgálóoldali Blazor alkalmazásba:
- Meglévő engedélynélkül.
- Engedéllyel.
További jogcímek és jogkivonatok külső szolgáltatóktól
A külső szolgáltatóktól származó további jogcímek tárolásához lásd: További jogcímek és jogkivonatok megőrzése külső szolgáltatóktól ASP.NET Core.
Azure App Service Linux-on Identity szerverrel
Adja meg kifejezetten a kiállítót, amikor az Azure App Service-et Linuxon telepíti a Identity Serverrel. További információ: Az Identity használata webes API-háttérrendszer biztonságossá tételéhez az SLA-khoz.
Szolgáltatások komponenshez kötött hatókörrel történő injektálása AuthenticationStateProvider
használatával
Ne próbálja meg feloldani az egyéni hatókörön belüli AuthenticationStateProvider, mert az a AuthenticationStateProvider nem megfelelően inicializált új példányának létrehozását eredményezi.
A AuthenticationStateProvider egy összetevőhöz hatókörölt szolgáltatásban való eléréséhez fecskendezze be a AuthenticationStateProvider-et a @inject
irányelv vagy a [Inject]
attribútum segítségével, és adja át paraméterként a szolgáltatásnak. Ez a módszer biztosítja, hogy a AuthenticationStateProvider megfelelő inicializált példánya legyen használatban minden felhasználói alkalmazáspéldányhoz.
ExampleService.cs
:
public class ExampleService
{
public async Task<string> ExampleMethod(AuthenticationStateProvider authStateProvider)
{
var authState = await authStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
if (user.Identity is not null && user.Identity.IsAuthenticated)
{
return $"{user.Identity.Name} is authenticated.";
}
else
{
return "The user is NOT authenticated.";
}
}
}
Regisztrálja a szolgáltatást hatókörként. A kiszolgálóoldali Blazor-alkalmazásokban a hatókörrel rendelkező szolgáltatások élettartama megegyezik az ügyfélkapcsolat kapcsolatcsoportidőtartamával.
A Program
fájlban:
builder.Services.AddScoped<ExampleService>();
A(z) Startup.ConfigureServices
Startup.cs
-ben:
services.AddScoped<ExampleService>();
Az alábbi InjectAuthStateProvider
összetevőben:
- Az összetevő örökli OwningComponentBase.
- A AuthenticationStateProvider be van fecskendezve és át van adva
ExampleService.ExampleMethod
-nek. -
ExampleService
megoldódik OwningComponentBase.ScopedServices és GetRequiredServicefelhasználásával, így visszaadja a felhasználó áramkörének élettartamára szóló helyes, inicializáltExampleService
-példányt.
InjectAuthStateProvider.razor
:
@page "/inject-auth-state-provider"
@inherits OwningComponentBase
@inject AuthenticationStateProvider AuthenticationStateProvider
<h1>Inject <code>AuthenticationStateProvider</code> Example</h1>
<p>@message</p>
@code {
private string? message;
private ExampleService? ExampleService { get; set; }
protected override async Task OnInitializedAsync()
{
ExampleService = ScopedServices.GetRequiredService<ExampleService>();
message = await ExampleService.ExampleMethod(AuthenticationStateProvider);
}
}
@page "/inject-auth-state-provider"
@inject AuthenticationStateProvider AuthenticationStateProvider
@inherits OwningComponentBase
<h1>Inject <code>AuthenticationStateProvider</code> Example</h1>
<p>@message</p>
@code {
private string? message;
private ExampleService? ExampleService { get; set; }
protected override async Task OnInitializedAsync()
{
ExampleService = ScopedServices.GetRequiredService<ExampleService>();
message = await ExampleService.ExampleMethod(AuthenticationStateProvider);
}
}
További információért lásd a OwningComponentBase útmutatást az ASP.NET Core Blazor függőségi injektálásról.
Jogosulatlan tartalommegjelenítés egyéni AuthenticationStateProvider
előkészítés közben
A jogosulatlan tartalom megjelenítésének elkerülése érdekében, például egy AuthorizeView
-összetevőben lévő tartalom, miközben egy egyéni AuthenticationStateProvider
előrendelt, az alábbi módszerek :
Az egyéni IHostEnvironmentAuthenticationStateProviderAuthenticationStateProvider implementálása az előfeldolgozás támogatásához: Lásd a IHostEnvironmentAuthenticationStateProviderpéldául a Blazor keretrendszer ServerAuthenticationStateProvider implementációját a
ServerAuthenticationStateProvider.cs
(referenciaforrás)-ben.Jegyzet
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltása legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
A renderelés előzetes letiltása: A renderelési módot a
prerender
paraméterfalse
-re állításával jelezze az alkalmazás összetevőhierarchiájának legfelső szintű összetevőjénél, amely nem gyökérösszetevő.Jegyzet
A gyökérösszetevő interaktívvá tétele, például a
App
összetevő nem támogatott. Ezért aApp
összetevő nem tilthatja le közvetlenül az előzetes rendezést.A Blazor Web App projektsablonon alapuló alkalmazások esetében az előrendelés általában le van tiltva, ha a
Routes
összetevőt aApp
összetevőben (Components/App.razor
) használják:<Routes @rendermode="new InteractiveServerRenderMode(prerender: false)" />
Emellett tiltsa le az előbetöltést a
HeadOutlet
összetevőnél:<HeadOutlet @rendermode="new InteractiveServerRenderMode(prerender: false)" />
A
Routes
összetevőpéldányra alkalmazott renderelési módot is szelektíven szabályozhatja. Lásd például ASP.NET Core Blazor renderelési módokat.
A prerendelés letiltása: Nyissa meg a
_Host.cshtml
fájlt, és módosítsa arender-mode
attribútumát Server-re:<component type="typeof(App)" render-mode="Server" />
- A felhasználó hitelesítése a kiszolgálón az alkalmazás indítása előtt: Ennek a módszernek a használatához az alkalmazásnak válaszolnia kell a felhasználó kezdeti kérésére a Identity-alapú bejelentkezési oldalon, vagy meg kell tekintenie, és meg kell akadályoznia az Blazor végpontokra irányuló kéréseket a hitelesítésükig. További információ: ASP.NET Core-alkalmazás létrehozása engedélyezésiáltal védett felhasználói adatokkal. A hitelesítés után az előre meghatározott Razor összetevőkben lévő jogosulatlan tartalom csak akkor jelenik meg, ha a felhasználó valóban jogosulatlanul tekinti meg a tartalmat.
Felhasználói állapotkezelés
Annak ellenére, hogy a névben az "állapot" szó szerepel, AuthenticationStateProvider nem általános felhasználói állapottárolásához van. AuthenticationStateProvider csak a felhasználó hitelesítési állapotát jelzi az alkalmazásnak, hogy be van-e jelentkezve az alkalmazásba, és hogy kiként van bejelentkezve.
A hitelesítés ugyanazt a ASP.NET Core Identity-hitelesítést használja, mint Razor Pages és MVC-alkalmazások. A ASP.NET Core Identity felhasználói állapota áramlik Blazor felé anélkül, hogy az alkalmazáshoz további kódot kellene hozzáadni. Kövesse az ASP.NET Core Identity cikkeit és oktatóanyagait, hogy a Identity funkciók érvénybe léphessenek az alkalmazás Blazor részeiben.
Általános állapotkezeléssel kapcsolatos útmutatásért, amely az ASP.NET Core Identitykívül esik, lásd: ASP.NET Core Blazor állapotkezelési.
További biztonsági absztrakciók
Két további absztrakció is részt vesz a hitelesítési állapot kezelésében:
ServerAuthenticationStateProvider (hivatkozási forrás): A AuthenticationStateProvider keretrendszer által a kiszolgálótól származó hitelesítési állapot lekérésére használt Blazor.
RevalidatingServerAuthenticationStateProvider (referenciaforrás): A AuthenticationStateProvider keretrendszer által használt Blazor-szolgáltatások alaposztálya a gazdakörnyezet hitelesítési állapotának fogadásához és rendszeres időközönként történő újraértékeléséhez.
Az alapértelmezett 30 perces újraértékelési időköz módosítható
RevalidatingIdentityAuthenticationStateProvider
(Areas/Identity/RevalidatingIdentityAuthenticationStateProvider.cs
). Az alábbi példa 20 percre rövidíti az időközt:protected override TimeSpan RevalidationInterval => TimeSpan.FromMinutes(20);
Jegyzet
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltása legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Hitelesítési állapotkezelés kijelentkezéskor
A kiszolgálóoldali Blazor a kapcsolatcsoport teljes élettartama alatt megőrzi a felhasználói hitelesítési állapotot, beleértve a böngészőlapokat is. Ahhoz, hogy egy felhasználót proaktívan kijelentkeztessen minden böngészőfülön, amikor ő kijelentkezik az egyik fülön, implementálnia kell egy rövid RevalidatingServerAuthenticationStateProvider-t egy -val (RevalidationInterval).
Jegyzet
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék váltása legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Ideiglenes átirányítási URL-cím érvényességi időtartama
Ez a szakasz Blazor Web Apps.
A RazorComponentsServiceOptions.TemporaryRedirectionUrlValidityDuration opció segítségével lekérheti vagy beállíthatja az ASP.NET Core Data Protection érvényességi időtartamát a Blazor kiszolgálóoldali renderelés által kibocsátott ideiglenes átirányító URL-címekhez. Ezeket csak átmenetien használják, így az élettartamnak csak elég hosszúnak kell lennie ahhoz, hogy egy ügyfél megkapja az URL-címet, és navigálást kezdjen rajta. Azonban elég hosszúnak kell lennie ahhoz is, hogy az óraeltérés engedélyezhető legyen a kiszolgálók között. Az alapértelmezett érték öt perc.
Az alábbi példában az érték hét percre van kiterjesztve:
builder.Services.AddRazorComponents(options =>
options.TemporaryRedirectionUrlValidityDuration =
TimeSpan.FromMinutes(7));
Ügyféloldali Blazor hitelesítés
Az ügyféloldali Blazor alkalmazásokban az ügyféloldali hitelesítési ellenőrzések megkerülhetők, mert az ügyféloldali kódokat a felhasználók módosíthatják. Ugyanez érvényes minden ügyféloldali alkalmazástechnológiára, beleértve a JavaScript SPA-keretrendszereket és a natív alkalmazásokat bármely operációs rendszerhez.
Adja hozzá a következőket:
A
Microsoft.AspNetCore.Components.Authorization
NuGet-csomag csomaghivatkozása.Jegyzet
A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezeléseCsomaghasználati munkafolyamat (NuGet-dokumentáció)című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.
A Microsoft.AspNetCore.Components.Authorization névtér az alkalmazás
_Imports.razor
fájljára.
A hitelesítés kezeléséhez használja a beépített vagy egyéni AuthenticationStateProvider szolgáltatást.
További információ az ügyféloldali hitelesítésről: Biztonságos ASP.NET Core Blazor WebAssembly.
AuthenticationStateProvider
szolgáltatás
AuthenticationStateProvider a AuthorizeView összetevő és a kaszkádolt hitelesítési szolgáltatások által a felhasználó hitelesítési állapotának lekéréséhez használt mögöttes szolgáltatás.
AuthenticationStateProvider az AuthorizeView összetevő és CascadingAuthenticationState összetevő által a felhasználó hitelesítési állapotának lekéréséhez használt mögöttes szolgáltatás.
Általában nem szoktad közvetlenül használni a AuthenticationStateProvider-t. Használja a cikk későbbi részében ismertetett AuthorizeView
összetevő vagy Task<AuthenticationState>
megközelítéseit. A AuthenticationStateProvider közvetlen használatának fő hátránya, hogy a rendszer nem értesíti automatikusan az összetevőt, ha a mögöttes hitelesítési állapot adatai megváltoznak.
Egyéni AuthenticationStateProviderimplementálásához tekintse meg ASP.NET Core Blazor hitelesítési állapotcímű témakört, amely útmutatást tartalmaz a felhasználói hitelesítési állapot változásértesítések implementálásához.
Felhasználó jogcímeinek egyszerű adatainak beszerzése
A AuthenticationStateProvider szolgáltatás az aktuális felhasználó ClaimsPrincipal adatait is meg tudja adni az alábbi példában látható módon.
ClaimsPrincipalData.razor
:
@page "/claims-principal-data"
@using System.Security.Claims
@inject AuthenticationStateProvider AuthenticationStateProvider
<h1>ClaimsPrincipal Data</h1>
<button @onclick="GetClaimsPrincipalData">Get ClaimsPrincipal Data</button>
<p>@authMessage</p>
@if (claims.Any())
{
<ul>
@foreach (var claim in claims)
{
<li>@claim.Type: @claim.Value</li>
}
</ul>
}
<p>@surname</p>
@code {
private string? authMessage;
private string? surname;
private IEnumerable<Claim> claims = Enumerable.Empty<Claim>();
private async Task GetClaimsPrincipalData()
{
var authState = await AuthenticationStateProvider
.GetAuthenticationStateAsync();
var user = authState.User;
if (user.Identity is not null && user.Identity.IsAuthenticated)
{
authMessage = $"{user.Identity.Name} is authenticated.";
claims = user.Claims;
surname = user.FindFirst(c => c.Type == ClaimTypes.Surname)?.Value;
}
else
{
authMessage = "The user is NOT authenticated.";
}
}
}
Az előző példában:
-
ClaimsPrincipal.Claims visszaadja a felhasználó igényeit (
claims
) a felhasználói felületen való megjelenítés céljából. - A felhasználó vezetéknevét (
surname
) beolvasó sor meghívja a ClaimsPrincipal.FindAll-et egy predikátum használatával a felhasználó követeléseinek szűrésére.
@page "/claims-principal-data"
@using System.Security.Claims
@inject AuthenticationStateProvider AuthenticationStateProvider
<h1>ClaimsPrincipal Data</h1>
<button @onclick="GetClaimsPrincipalData">Get ClaimsPrincipal Data</button>
<p>@authMessage</p>
@if (claims.Any())
{
<ul>
@foreach (var claim in claims)
{
<li>@claim.Type: @claim.Value</li>
}
</ul>
}
<p>@surname</p>
@code {
private string? authMessage;
private string? surname;
private IEnumerable<Claim> claims = Enumerable.Empty<Claim>();
private async Task GetClaimsPrincipalData()
{
var authState = await AuthenticationStateProvider
.GetAuthenticationStateAsync();
var user = authState.User;
if (user.Identity is not null && user.Identity.IsAuthenticated)
{
authMessage = $"{user.Identity.Name} is authenticated.";
claims = user.Claims;
surname = user.FindFirst(c => c.Type == ClaimTypes.Surname)?.Value;
}
else
{
authMessage = "The user is NOT authenticated.";
}
}
}
Ha user.Identity.IsAuthenticated
true
, és mivel a felhasználó ClaimsPrincipal, a követelések számba vehetők, és a szerepkörök tagsága kiértékelhető.
A függőséginjektálással (DI) és a szolgáltatásokkal kapcsolatos további információkért lásd az alábbiakat: ASP.NET Core Blazor függőséginjektálásra és a függőséginjektálás ASP.NET Core-ban. Az egyéni AuthenticationStateProviderimplementálásáról további információt a ASP.NET Core Blazor hitelesítési állapotánakcímű témakörben talál.
A hitelesítési állapot kaszkádolt paraméterként való felfedése
Ha hitelesítési állapotadatokra van szükség a procedurális logikához, például a felhasználó által aktivált művelet végrehajtásakor, szerezze be a hitelesítési állapot adatait egy kaszkádolt paraméterTask<
AuthenticationState>
típus meghatározásával, ahogyan az alábbi példa is mutatja.
CascadeAuthState.razor
:
@page "/cascade-auth-state"
<h1>Cascade Auth State</h1>
<p>@authMessage</p>
@code {
private string authMessage = "The user is NOT authenticated.";
[CascadingParameter]
private Task<AuthenticationState>? authenticationState { get; set; }
protected override async Task OnInitializedAsync()
{
if (authenticationState is not null)
{
var authState = await authenticationState;
var user = authState?.User;
if (user?.Identity is not null && user.Identity.IsAuthenticated)
{
authMessage = $"{user.Identity.Name} is authenticated.";
}
}
}
}
@page "/cascade-auth-state"
<h1>Cascade Auth State</h1>
<p>@authMessage</p>
@code {
private string authMessage = "The user is NOT authenticated.";
[CascadingParameter]
private Task<AuthenticationState>? authenticationState { get; set; }
protected override async Task OnInitializedAsync()
{
if (authenticationState is not null)
{
var authState = await authenticationState;
var user = authState?.User;
if (user?.Identity is not null && user.Identity.IsAuthenticated)
{
authMessage = $"{user.Identity.Name} is authenticated.";
}
}
}
}
Ha user.Identity.IsAuthenticated
true
, a jogcímek felsorolhatók, és kiértékelhető a szerepkörökhöz való tartozás.
Állítsa be a Task<
AuthenticationState>
kaszkádolt paramétert a AuthorizeRouteView és a kaszkádolt hitelesítési állapotszolgáltatások használatával.
Amikor egy Blazor alkalmazást hoz létre az egyik Blazor-projektsablonból, ahol a hitelesítés engedélyezve van, az alkalmazás az alábbi példában bemutatott AuthorizeRouteView-t és AddCascadingAuthenticationState hívását tartalmazza. Az ügyféloldali Blazor-alkalmazások tartalmazzák a szükséges szolgáltatásregisztrációkat is. További információt a Jogosulatlan tartalom testreszabása a Router
összetevő szakaszában talál.
<Router ...>
<Found ...>
<AuthorizeRouteView RouteData="routeData"
DefaultLayout="typeof(Layout.MainLayout)" />
...
</Found>
</Router>
A Program
fájlban regisztrálja a kaszkádolt hitelesítési állapotszolgáltatásokat:
builder.Services.AddCascadingAuthenticationState();
Állítsa be a Task<
AuthenticationState>
kaszkádolt paramétert a AuthorizeRouteView és CascadingAuthenticationState összetevők használatával.
Amikor Blazor alkalmazást hoz létre az egyik Blazor projektsablonból, amelyen engedélyezve van a hitelesítés, az alkalmazás tartalmazza az alábbi példában látható AuthorizeRouteView és CascadingAuthenticationState összetevőket. Az ügyféloldali Blazor-alkalmazások tartalmazzák a szükséges szolgáltatásregisztrációkat is. További információt a Jogosulatlan tartalom testreszabása a Router
összetevő szakaszában talál.
<CascadingAuthenticationState>
<Router ...>
<Found ...>
<AuthorizeRouteView RouteData="routeData"
DefaultLayout="typeof(MainLayout)" />
...
</Found>
</Router>
</CascadingAuthenticationState>
Jegyzet
A ASP.NET Core 5.0.1 kiadásával és minden további 5.x kiadás esetén a Router
összetevő tartalmazza a PreferExactMatches
paramétert @true
. További információért lásd: Az ASP.NET Core 3.1-ről 5.0-ra történő migrálás.
Ügyféloldali Blazor alkalmazásban adja hozzá az engedélyezési szolgáltatásokat a Program
fájlhoz:
builder.Services.AddAuthorizationCore();
Ügyféloldali Blazor alkalmazásban adja hozzá a beállításokat és az engedélyezési szolgáltatásokat a Program
fájlhoz:
builder.Services.AddOptions();
builder.Services.AddAuthorizationCore();
A kiszolgálóoldali Blazor-alkalmazásokban már elérhetők a beállítások és az engedélyezés szolgáltatásai, ezért további lépésekre nincs szükség.
Felhatalmazás
A felhasználó hitelesítése után engedélyezési szabályok vonatkoznak a felhasználó által elvégezhető műveletek szabályozására.
A hozzáférés általában a következőtől függően adható meg vagy tagadható meg:
- A rendszer hitelesíti a felhasználót (bejelentkezve).
- A felhasználó szerepkörrel rendelkezik.
- A felhasználónak jogcíme.
- Egy szabályzat teljesül.
Ezek a fogalmak ugyanazok, mint egy ASP.NET Core MVC vagy Razor Pages alkalmazásban. Az ASP.NET Core-biztonságról további információt a ASP.NET Core Security és Identitycímű témakörben talál.
AuthorizeView
összetevő
A AuthorizeView összetevő szelektíven jeleníti meg a felhasználói felület tartalmát attól függően, hogy a felhasználó jogosult-e rá. Ez a módszer akkor hasznos, ha csak kell megjelenítenie adatokat a felhasználó számára, és nem kell a felhasználó identitását eljárási logikában használnia.
Az összetevő egy context
típusú AuthenticationState (@context
Razor szintaxisban) változót tesz elérhetővé, amellyel hozzáférhet a bejelentkezett felhasználó adataihoz:
<AuthorizeView>
<p>Hello, @context.User.Identity?.Name!</p>
</AuthorizeView>
Ha a felhasználó nem rendelkezik a Authorized és NotAuthorized paraméterek kombinációjával, különböző tartalmakat is megjeleníthet:
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
<p><button @onclick="HandleClick">Authorized Only Button</button></p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
@code {
private void HandleClick() { ... }
}
Bár a AuthorizeView összetevő a felhasználó engedélyezési állapota alapján szabályozza az elemek láthatóságát, maga az eseménykezelő biztonságát nem biztosítja. Az előző példában a HandleClick
metódus csak a jogosult felhasználók számára látható gombhoz van társítva, de semmi sem akadályozza meg a metódus más helyekről való meghívását. A metódusszintű biztonság biztosítása érdekében implementáljon további engedélyezési logikát magában a kezelőben vagy a megfelelő API-ban.
Razor
Blazor Web Appösszetevői soha nem jelenítik meg <NotAuthorized>
tartalmat, ha az engedélyezés kiszolgálóoldalon meghiúsul a statikus kiszolgálóoldali renderelés (statikus SSR) során. A kiszolgálóoldali ASP.NET Core-folyamat a kiszolgálón dolgozza fel az engedélyezést. Használjon kiszolgálóoldali technikákat a jogosulatlan kérések kezeléséhez. További információ: ASP.NET Core Blazor renderelési módok.
Figyelmeztetés
Az ügyféloldali jelölőnyelv és a AuthorizeView-hoz társított metódusok csak a által megjelenített felhasználói felület az ügyféloldali Blazor-alkalmazásokban védettek a megtekintéstől és a végrehajtástól. Az ügyféloldali Blazorengedélyezett tartalmainak és biztonságos módszereinek védelme érdekében a tartalmat általában egy biztonságos, engedélyezett webes API-hívás biztosítja egy kiszolgálói API-hoz, és soha nem tárolja az alkalmazásban. További információ: Webes API meghívása egy ASP.NET Core Blazor-alkalmazásból és ASP.NET Core Blazor WebAssembly további biztonsági forgatókönyvek.
A Authorized és NotAuthorized tartalma tetszőleges elemeket tartalmazhat, például más interaktív összetevőket.
Az engedélyezési feltételekre, például a felhasználói felület beállításait vagy a hozzáférést vezérlő szerepkörökre vagy szabályzatra az Engedélyezési szakasz vonatkozik.
Ha nincsenek megadva engedélyezési feltételek, AuthorizeView egy alapértelmezett szabályzatot használ:
- A hitelesített (bejelentkezett) felhasználók engedélyezettek.
- A nem hitelesített (kijelentkezett) felhasználók nem engedélyezettek.
A AuthorizeView összetevő a NavMenu
összetevőben (Shared/NavMenu.razor
) használható egy NavLink
összetevő (NavLink) megjelenítéséhez, de vegye figyelembe, hogy ez a módszer csak a listaelemet távolítja el a renderelt kimenetből. Ez nem akadályozza meg a felhasználót abban, hogy az összetevőre navigáljon. Az engedélyezést külön implementálja a célösszetevőben.
Szerepköralapú és szabályzatalapú engedélyezés
A AuthorizeView összetevő támogatja szerepköralapú vagy szabályzatalapú-engedélyezést.
Szerepköralapú engedélyezéshez használja a Roles paramétert. Az alábbi példában a felhasználónak rendelkeznie kell a Admin
vagy Superuser
szerepkörökhöz tartozó szerepkör-jogcímpel:
<AuthorizeView Roles="Admin, Superuser">
<p>You have an 'Admin' or 'Superuser' role claim.</p>
</AuthorizeView>
Ha azt szeretné, hogy egy felhasználó Admin
és Superuser
szerepkör-jogcímekkel is rendelkezzen, ágyazza be a(z) AuthorizeView összetevőket.
<AuthorizeView Roles="Admin">
<p>User: @context.User</p>
<p>You have the 'Admin' role claim.</p>
<AuthorizeView Roles="Superuser" Context="innerContext">
<p>User: @innerContext.User</p>
<p>You have both 'Admin' and 'Superuser' role claims.</p>
</AuthorizeView>
</AuthorizeView>
Az előző kód létrehoz egy Context
-t a belső AuthorizeView összetevőhöz, hogy megakadályozza a AuthenticationState összefüggés ütközését. A AuthenticationState kontextus a külső AuthorizeView-ben érhető el a kontextus elérésének szabványos megközelítésével (@context.User
). A környezet a belső AuthorizeView érhető el a nevesített innerContext
környezettel (@innerContext.User
).
További információért, a konfigurációról szóló útmutatást is beleértve, tekintse meg a szerepkör alapú engedélyezést az ASP.NET Core-ban .
Szabályzatalapú engedélyezéshez használja a Policy paramétert egyetlen házirendnévvel:
<AuthorizeView Policy="Over21">
<p>You satisfy the 'Over21' policy.</p>
</AuthorizeView>
Annak az esetnek a kezeléséhez, amikor a felhasználónak meg kell felelnie a különböző szabályzatok egyikének, hozzon létre egy szabályzatot, amely megerősíti, hogy a felhasználó más szabályzatoknak is megfelel.
Ha azt az esetet szeretné kezelni, amikor a felhasználónak egyszerre több szabályzatot is teljesítenie kell, az alábbi módszerek:
Hozzon létre egy szabályzatot AuthorizeView, amely megerősíti, hogy a felhasználó több más szabályzatnak is megfelel.
A szabályzatok beágyazása több AuthorizeView összetevőbe:
<AuthorizeView Policy="Over21"> <AuthorizeView Policy="LivesInCalifornia"> <p>You satisfy the 'Over21' and 'LivesInCalifornia' policies.</p> </AuthorizeView> </AuthorizeView>
A jogcímalapú engedélyezés a szabályzatalapú engedélyezés speciális esete. Meghatározhat például egy olyan szabályzatot, amely megköveteli, hogy a felhasználók rendelkezzenek egy adott jogcímre. További információkért lásd: Szabályzatalapú jogosultságkezelés az ASP.NET Core-ban.
Ha sem Roles, sem Policy nincs megadva, AuthorizeView az alapértelmezett házirendet használja:
- A hitelesített (bejelentkezett) felhasználók engedélyezettek.
- A nem hitelesített (kijelentkezett) felhasználók nem engedélyezettek.
Mivel a .NET-sztringek összehasonlítása megkülönbözteti a kis- és nagybetűket, az egyező szerepkör- és szabálynevek is megkülönböztetik a kis- és nagybetűket. A Admin
(nagybetűs A
) például nem ugyanaz a szerepkör, mint a admin
(kisbetűs a
).
A Pascal-esetet általában szerepkör- és szabályzatnevekhez (például BillingAdministrator
) használják, de a Pascal-eset használata nem szigorú követelmény. Különböző elnevezési sémák, mint például a camel case, kebab case és snake case engedélyezettek. A szerepkör- és szabályzatnevekben lévő szóközök használata szokatlan, de a keretrendszer engedélyezi. A billing administrator
például egy szokatlan szerepkör vagy szabályzatnév formátum a .NET-alkalmazásokban, de érvényes szerepkör vagy szabályzatnév.
Az aszinkron hitelesítés során megjelenített tartalom
Blazor lehetővé teszi, hogy a hitelesítési állapotot aszinkron módonmeghatározzák. Ennek a megközelítésnek az elsődleges forgatókönyve az ügyféloldali Blazor alkalmazásokban van, amelyek hitelesítés céljából külső végpontra kérnek kérelmet.
Amíg a hitelesítés folyamatban van, AuthorizeView nem jelenít meg tartalmat. Ha a hitelesítés során tartalmat szeretne megjeleníteni, rendeljen hozzá tartalmat a Authorizing paraméterhez:
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<Authorizing>
<p>You can only see this content while authentication is in progress.</p>
</Authorizing>
</AuthorizeView>
Ez a megközelítés általában nem alkalmazható a kiszolgálóoldali Blazor-alkalmazásokra. A kiszolgálóoldali Blazor-alkalmazások az állapot létrehozása után azonnal ismerik a hitelesítési állapotot. Authorizing tartalmakat az alkalmazás AuthorizeView összetevőjében lehet megadni, de a tartalom soha nem jelenik meg.
[Authorize]
attribútum
A [Authorize]
attribútumRazor összetevőkben érhető el:
@page "/"
@attribute [Authorize]
You can only see this if you're signed in.
Fontos
Csak a [Authorize]
útválasztón keresztül elért @page
összetevőkhöz használja a Blazor-t. Az engedélyezés csak az útválasztás szempontjából történik, és nem az oldalon megjelenített gyermekösszetevők esetében. Ha engedélyezni szeretné az egyes részek megjelenítését egy lapon, használja inkább a AuthorizeView.
A [Authorize]
attribútum a szerepköralapú vagy szabályzatalapú engedélyezést is támogatja. Szerepköralapú engedélyezéshez használja a Roles paramétert:
@page "/"
@attribute [Authorize(Roles = "Admin, Superuser")]
<p>You can only see this if you're in the 'Admin' or 'Superuser' role.</p>
Szabályzatalapú engedélyezéshez használja a Policy paramétert:
@page "/"
@attribute [Authorize(Policy = "Over21")]
<p>You can only see this if you satisfy the 'Over21' policy.</p>
Ha sem Roles, sem Policy nincs megadva, [Authorize]
az alapértelmezett házirendet használja:
- A hitelesített (bejelentkezett) felhasználók engedélyezettek.
- A nem hitelesített (kijelentkezett) felhasználók nem engedélyezettek.
Ha a felhasználónak nincs jogosultsága, és ha az alkalmazás nem testre szabja a nem engedélyezett tartalmat a Router
összetevővel, a keretrendszer automatikusan megjeleníti a következő tartalék üzenetet:
Not authorized.
Erőforrás-engedélyezés
Ha engedélyezni szeretné a felhasználók számára az erőforrásokat, adja át a kérés útvonaladatait a ResourceAuthorizeRouteView paraméterének.
A kért útvonal Router.Found tartalma:
<AuthorizeRouteView Resource="routeData" RouteData="routeData"
DefaultLayout="typeof(MainLayout)" />
Az engedélyezési állapot adatainak átadásáról és a folyamatlogikában való használatáról a A hitelesítési állapot kaszkádolt paraméterként való felfedése szakaszban talál további információt.
Amikor a AuthorizeRouteView megkapja az erőforrás útvonaladatait, az autorizációs szabályzatok hozzáférhetnek RouteData.PageType-hez és RouteData.RouteValues-höz, ami lehetővé teszi az egyéni logika számára az engedélyezési döntések meghozatalát.
Az alábbi példában egy EditUser
szabályzatot hoznak létre AuthorizationOptions az alkalmazás engedélyezési szolgáltatásának konfigurációjához (AddAuthorizationCore) a következő logikával:
- Állapítsa meg, hogy létezik-e útvonalérték
id
kulccsal. Ha a kulcs létezik, az útvonalnak az értékét avalue
tárolja. - Egy
id
nevű változóban tárolja avalue
sztringként, vagy állítson be egy üres sztringértéket (string.Empty
). - Ha
id
nem üres karakterlánc, győződjünk meg arról, hogy a szabályzat teljesül, ha a karakterlánc értéketrue
-vel kezdődik (EMP
visszaadása). Ellenkező esetben érvényesítse, hogy a szabályzat meghiúsul (false
visszaadása).
A Program
fájlban:
Adja hozzá a névtereket: Microsoft.AspNetCore.Components és System.Linq.
using Microsoft.AspNetCore.Components; using System.Linq;
Adja hozzá a szabályzatot:
options.AddPolicy("EditUser", policy => policy.RequireAssertion(context => { if (context.Resource is RouteData rd) { var routeValue = rd.RouteValues.TryGetValue("id", out var value); var id = Convert.ToString(value, System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty; if (!string.IsNullOrEmpty(id)) { return id.StartsWith("EMP", StringComparison.InvariantCulture); } } return false; }) );
Az előző példa egy túlsimított engedélyezési szabályzat, amely csupán egy működő példával szemlélteti a koncepciót. Az engedélyezési szabályzatok létrehozásával és konfigurálásával kapcsolatos további információkért lásd szabályzatalapú engedélyezést ASP.NET Core.
Az alábbi EditUser
összetevőben az erőforrás /users/{id}/edit
rendelkezik egy útvonalparaméterrel a felhasználó azonosítójára ({id}
). Az összetevő az előzetes EditUser
engedélyezési szabályzattal határozza meg, ha a id
útvonalértéke a EMP
-vel kezdődik. Ha id
EMP
kezdődik, a szabályzat sikeres lesz, és az összetevőhöz való hozzáférés engedélyezve van. Ha id
nem EMP
értékkel kezdődik, vagy ha id
üres sztring, a szabályzat meghiúsul, és az összetevő nem töltődik be.
EditUser.razor
:
@page "/users/{id}/edit"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Policy = "EditUser")]
<h1>Edit User</h1>
<p>The "EditUser" policy is satisfied! <code>Id</code> starts with 'EMP'.</p>
@code {
[Parameter]
public string? Id { get; set; }
}
@page "/users/{id}/edit"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Policy = "EditUser")]
<h1>Edit User</h1>
<p>The "EditUser" policy is satisfied! <code>Id</code> starts with 'EMP'.</p>
@code {
[Parameter]
public string? Id { get; set; }
}
Jogosulatlan tartalom testreszabása a Router
összetevővel
A Router összetevő a AuthorizeRouteView összetevővel együtt lehetővé teszi, hogy az alkalmazás egyéni tartalmat adjon meg, ha:
- A felhasználó nem tud
[Authorize]
feltételt alkalmazni az összetevőre. Megjelenik a<NotAuthorized>
elem jelölése. A[Authorize]
attribútumot az[Authorize]
attribútum szakasz ismerteti. - Az aszinkron engedélyezés folyamatban van, ami általában azt jelenti, hogy a felhasználó hitelesítésének folyamata folyamatban van. Megjelenik a
<Authorizing>
elem jelölése.
Fontos
Blazor
<NotAuthorized>
és <NotFound>
tartalmat megjelenítő útválasztó-funkciók nem működnek a statikus kiszolgálóoldali renderelés (statikus SSR) során, mert a kérésfeldolgozást teljes egészében a ASP.NET Core köztes szoftverfolyamat-kérések feldolgozása kezeli, és a Razor összetevők egyáltalán nem jelennek meg jogosulatlan vagy rossz kérések esetén. Kiszolgálóoldali technikákkal kezelheti a statikus SSR során felmerülő jogosulatlan és rossz kéréseket. További információ: ASP.NET Core Blazor renderelési módok.
<Router ...>
<Found ...>
<AuthorizeRouteView ...>
<NotAuthorized>
...
</NotAuthorized>
<Authorizing>
...
</Authorizing>
</AuthorizeRouteView>
</Found>
</Router>
A Authorized és NotAuthorized tartalma tetszőleges elemeket tartalmazhat, például más interaktív összetevőket.
Jegyzet
Az előzőhöz kaszkádolt hitelesítési állapotszolgáltatások regisztrációja szükséges az alkalmazás Program
fájljában:
builder.Services.AddCascadingAuthenticationState();
<CascadingAuthenticationState>
<Router ...>
<Found ...>
<AuthorizeRouteView ...>
<NotAuthorized>
...
</NotAuthorized>
<Authorizing>
...
</Authorizing>
</AuthorizeRouteView>
</Found>
</Router>
</CascadingAuthenticationState>
A NotFound, Authorizedés NotAuthorized tartalma tetszőleges elemeket tartalmazhat, például más interaktív összetevőket.
Ha nincs megadva NotAuthorized tartalom, a AuthorizeRouteView a következő tartalék üzenetet használja:
Not authorized.
A Blazor WebAssembly projektsablonból létrehozott, engedélyezett hitelesítéssel rendelkező alkalmazás tartalmaz egy RedirectToLogin
összetevőt, amely a <NotAuthorized>
összetevő Router tartalmában van elhelyezve. Ha egy felhasználó nincs hitelesítve (context.User.Identity?.IsAuthenticated != true
), a RedirectToLogin
összetevő átirányítja a böngészőt a authentication/login
végpontra hitelesítés céljából. A rendszer az identitásszolgáltatóval való hitelesítés után visszaadja a felhasználót a kért URL-címre.
Eljárási logika
Ha az alkalmazásnak az eljárási logika részeként ellenőriznie kell az engedélyezési szabályokat, használjon Task<
AuthenticationState>
típusú kaszkádolt paramétert a felhasználó ClaimsPrincipalbeszerzéséhez.
Task<
AuthenticationState
>
más szolgáltatásokkal, például IAuthorizationService
kombinálhatók a szabályzatok kiértékeléséhez.
Az alábbi példában:
- A
user.Identity.IsAuthenticated
végrehajtja a hitelesített (bejelentkezett) felhasználók kódját. - A
user.IsInRole("admin")
végrehajtja a "Rendszergazda" szerepkörben lévő felhasználók kódját. - A
(await AuthorizationService.AuthorizeAsync(user, "content-editor")).Succeeded
a tartalomszerkesztő szabályzatnak megfelelő felhasználók kódját hajtja végre.
A kiszolgálóoldali Blazor-alkalmazások tartalmazzák a projektsablonból létrehozott megfelelő névtereket. Ügyféloldali Blazor alkalmazásban erősítse meg a Microsoft.AspNetCore.Authorization és Microsoft.AspNetCore.Components.Authorization névterek jelenlétét az összetevőben vagy az alkalmazás _Imports.razor
fájljában:
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization
ProceduralLogic.razor
:
@page "/procedural-logic"
@inject IAuthorizationService AuthorizationService
<h1>Procedural Logic Example</h1>
<button @onclick="@DoSomething">Do something important</button>
@code {
[CascadingParameter]
private Task<AuthenticationState>? authenticationState { get; set; }
private async Task DoSomething()
{
if (authenticationState is not null)
{
var authState = await authenticationState;
var user = authState?.User;
if (user is not null)
{
if (user.Identity is not null && user.Identity.IsAuthenticated)
{
// ...
}
if (user.IsInRole("Admin"))
{
// ...
}
if ((await AuthorizationService.AuthorizeAsync(user, "content-editor"))
.Succeeded)
{
// ...
}
}
}
}
}
@page "/procedural-logic"
@inject IAuthorizationService AuthorizationService
<h1>Procedural Logic Example</h1>
<button @onclick="@DoSomething">Do something important</button>
@code {
[CascadingParameter]
private Task<AuthenticationState>? authenticationState { get; set; }
private async Task DoSomething()
{
if (authenticationState is not null)
{
var authState = await authenticationState;
var user = authState?.User;
if (user is not null)
{
if (user.Identity is not null && user.Identity.IsAuthenticated)
{
// ...
}
if (user.IsInRole("Admin"))
{
// ...
}
if ((await AuthorizationService.AuthorizeAsync(user, "content-editor"))
.Succeeded)
{
// ...
}
}
}
}
}
Hibák elhárítása
Gyakori hibák:
Az engedélyezéshez
Task<AuthenticationState>
típusú kaszkádolt paraméter szükséges. Fontolja meg aCascadingAuthenticationState
használatát ennek biztosításához.a
null
értéket kapja aauthenticationStateTask
-hoz
Valószínű, hogy a projektet nem kiszolgálóoldali Blazor sablonnal hozták létre, amelyen engedélyezve van a hitelesítés.
.NET 7-es vagy korábbi verziókban csomagolja a <CascadingAuthenticationState>
-t a felhasználói felületi fa egy része köré, például a Blazor router köré:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
A .NET 8 vagy újabb verzióiban ne használja a CascadingAuthenticationState összetevőt:
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Ehelyett adjon hozzá kaszkádolt hitelesítési állapotszolgáltatásokat a szolgáltatásgyűjteményhez a Program
fájlban:
builder.Services.AddCascadingAuthenticationState();
A CascadingAuthenticationState összetevő (.NET 7 vagy korábbi) vagy a AddCascadingAuthenticationState (.NET 8 vagy újabb) által nyújtott szolgáltatások biztosítják a Task<
AuthenticationState>
kaszkádolt paramétert, amelyet a mögöttes AuthenticationStateProvider függőséginjektáló szolgáltatástól kap.
Személyazonosításra alkalmas adatok (PII)
A Microsoft a GDPR definícióját használja a "személyes adatok" (GDPR 4.1), amikor a dokumentáció a személyazonosításra alkalmas adatokat (PII) tárgyalja.
A PII bármely azonosított vagy azonosítható természetes személyre vonatkozó információt tartalmaz. Azonosítható természetes személy az, aki közvetlenül vagy közvetve az alábbiak bármelyikével azonosítható:
- Név
- Azonosító szám
- Helyszín koordinátái
- Online azonosító
- Egyéb konkrét tényezők
- Fizikai
- Fiziológiai
- Genetika
- Mentális (pszichológiai)
- Gazdasági
- Kulturális
- Közösségi identitás
További erőforrások
- Kiszolgálóoldali és Blazor Web App-erőforrások
- Rövid útmutató: Bejelentkezés hozzáadása Microsoft-fiókkal egy ASP.NET Core-webalkalmazáshoz
- Gyors kezdés: ASP.NET Core webes API védelme a Microsoft identitásplatformmal
-
ASP.NET Core konfigurálása proxykiszolgálókkal és terheléselosztókkal való együttműködésre: Útmutatást tartalmaz a következőhöz:
- A Továbbított fejlécek köztes szoftver használata a HTTPS-séma információinak megőrzéséhez proxykiszolgálókon és belső hálózatokon.
- További forgatókönyvek és használati esetek, beleértve a manuális sémakonfigurációt, a kérelem útvonalának változásait a megfelelő kérés-útválasztáshoz, valamint a kérelemséma továbbítása Linux és nem IIS fordított proxyk esetében.
- A Microsoft identitásplatform dokumentációja
- ASP.NET alapvető biztonsági témakörök
- Windows-hitelesítés konfigurálása ASP.NET Core
- IHttpContextAccessor/HttpContext ASP.NET Core Blazor-alkalmazásokban
- Authentication.MSAL JavaScript-kódtár egyéni verziójának létrehozása
- Nagyszerű Blazor: Hitelesítési közösségi mintalinkek
- ASP.NET Core Blazor Hybrid hitelesítési és engedélyezési
- Kiszolgálóoldali Blazor erőforrások
- Rövid útmutató: Bejelentkezés hozzáadása Microsoft-fiókkal egy ASP.NET Core-webalkalmazáshoz
- Gyors kezdés: ASP.NET Core webes API védelme a Microsoft identitásplatformmal
-
ASP.NET Core konfigurálása proxykiszolgálókkal és terheléselosztókkal való együttműködésre: Útmutatást tartalmaz a következőhöz:
- A Továbbított fejlécek köztes szoftver használata a HTTPS-séma információinak megőrzéséhez proxykiszolgálókon és belső hálózatokon.
- További forgatókönyvek és használati esetek, beleértve a manuális sémakonfigurációt, a kérelem útvonalának változásait a megfelelő kérés-útválasztáshoz, valamint a kérelemséma továbbítása Linux és nem IIS fordított proxyk esetében.
- A Microsoft identitásplatform dokumentációja
- ASP.NET alapvető biztonsági témakörök
- IHttpContextAccessor/HttpContext ASP.NET Core Blazor-alkalmazásokban
- Windows-hitelesítés konfigurálása ASP.NET Core
- Authentication.MSAL JavaScript-kódtár egyéni verziójának létrehozása
- Nagyszerű Blazor: Hitelesítési közösségi mintalinkek