Megosztás a következőn keresztül:


Önálló ASP.NET Core-alkalmazás Blazor WebAssembly védelme a Hitelesítési kódtár használatával

Note

Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Warning

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. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .

Ez a cikk bemutatja, hogyan lehet biztonságossá tenni egy ASP.NET Core Blazor WebAssembly önálló alkalmazást a Blazor WebAssembly Hitelesítési kódtárral.

A Blazor WebAssembly hitelesítési kódtár (Authentication.js) csak a Proof Key for Code Exchange (PKCE) engedélyezési kódfolyamot támogatja a Microsoft Authentication Library (MSAL, msal.js)segítségével. Más támogatási folyamatok implementálásához lépjen az MSAL útmutatóhoz az MSAL közvetlen implementálásához, de nem támogatjuk és nem javasoljuk a PKCE-tól eltérő támogatási folyamatok használatát az alkalmazásokhoz Blazor .

A Microsoft Entra (ME-ID) és az Azure Active Directory B2C (AAD B2C) esetében ne kövesse a jelen témakörben található útmutatást. További információt a ASP.NET Core Blazor WebAssembly önálló alkalmazás biztonságossá tételét a Microsoft Entra-azonosítóval , vagy ASP.NET Core Blazor WebAssembly önálló alkalmazás biztonságossá tételét az Azure Active Directory B2C-vel című témakörben talál.

A cikk elolvasása után további biztonsági forgatókönyvekkel kapcsolatban lásd ASP.NET Core Blazor WebAssembly további biztonsági forgatókönyveket.

Walkthrough

Az útmutató alszakaszai az alábbiakat ismertetik:

  • Alkalmazás regisztrálása
  • Az Blazor alkalmazás létrehozása
  • Az alkalmazás futtatása

Alkalmazás regisztrálása

Regisztráljon egy alkalmazást egy OpenID Connect-szolgáltatónál (OIDC)Identity az IP-cím fenntartójának útmutatása alapján.

Jegyezze fel a következő adatokat:

  • Hatóság (például https://accounts.google.com/).
  • Alkalmazás (ügyfél) azonosítója (például 2...7-e...q.apps.googleusercontent.com).
  • További IP-konfiguráció (lásd az IP dokumentációját).

Note

Az IP-címnek OIDC-t kell használnia. A Facebook IP-címe például nem OIDC-kompatibilis szolgáltató, ezért a jelen témakör útmutatása nem működik a Facebook IP-címével. További információ: Secure ASP.NET Core Blazor WebAssembly.

Az Blazor alkalmazás létrehozása

A Blazor WebAssembly könyvtárat használó létrehozásához kövesse az Ön által választott eszközhöz szükséges útmutatót. Ha támogatja a hitelesítést, az alkalmazás beállításával és konfigurálásával kapcsolatos útmutatásért tekintse meg a cikk alkalmazásrészeit.

Új Blazor WebAssembly projekt létrehozása hitelesítési mechanizmussal:

Az alkalmazássablon kiválasztásaBlazor WebAssembly után állítsa be a hitelesítés típusátegyéni fiókokra.

Az alkalmazássablon kiválasztásaBlazor WebAssembly után állítsa be a hitelesítés típusátegyéni fiókokra. Győződjön meg arról, hogy a ASP.NET Központi üzemeltetésű jelölőnégyzet nincs bejelölve.

Az egyéni fiókok kiválasztása ASP.NET Core rendszerét Identity használja. Ez a kijelölés hitelesítési támogatást ad hozzá, és nem eredményezi a felhasználók adatbázisban való tárolását. A cikk következő szakaszai további részleteket nyújtanak.

Az alkalmazás konfigurálása

Konfigurálja az alkalmazást az IP-cím útmutatása alapján. Az alkalmazásnak az Local:Authority és Local:ClientId konfigurációs beállításokat legalább az alkalmazás wwwroot/appsettings.json fájljában meg kell követelni.

{
  "Local": {
    "Authority": "{AUTHORITY}",
    "ClientId": "{CLIENT ID}"
  }
}

Google OAuth 2.0 OIDC-példa egy olyan alkalmazáshoz, amely az 5001-es porton fut:localhost

{
  "Local": {
    "Authority": "https://accounts.google.com/",
    "ClientId": "2...7-e...q.apps.googleusercontent.com",
    "PostLogoutRedirectUri": "https://localhost:5001/authentication/logout-callback",
    "RedirectUri": "https://localhost:5001/authentication/login-callback",
    "ResponseType": "code"
  }
}

Az átirányítási URI (https://localhost:5001/authentication/login-callback) regisztrálva van a Google API-k konzolján a hitelesítő adatok>{NAME}>engedélyezett átirányítási URI-jaiban, ahol {NAME} az alkalmazás ügyfélneve szerepel a Google API-konzol OAuth 2.0 ügyfélazonosítók alkalmazáslistájában.

Note

Az átirányítási URI portszámának localhost megadása nem szükséges az OAuth 2.0 specifikációja szerint egyes OIDC IP-címekhez. Az átirányítási URI esetében egyes IP-címek lehetővé teszik, hogy a hurokcímeknél kimaradjon a port. Mások engedélyezik a helyettesítő karakterek használatát a portszámhoz (például *). További információkért tekintse meg az IP dokumentációját.

Az alkalmazás futtatása

Az alkalmazás futtatásához használja az alábbi módszerek egyikét:

  • Visual Studio
    • Válassza a Futtatás gombot.
    • Használja a menüből a Hibakeresés indítása opciót: >.
    • Nyomja le az F5 billentyűt.
  • .NET CLI parancshéj: Hajtsa végre a dotnet watch (vagy dotnet run) parancsot az alkalmazás mappájából.

Az alkalmazás részei

Ez a szakasz az alkalmazás Blazor WebAssembly projektsablonból létrehozott részeit és az alkalmazás konfigurálásának módját ismerteti. Ebben a szakaszban nem talál konkrét útmutatást egy alapszintű munkaalkalmazáshoz, ha az alkalmazást az útmutató szakaszban található útmutatással hozta létre. Az ebben a szakaszban található útmutató segítséget nyújt egy alkalmazás frissítéséhez a felhasználók hitelesítéséhez és engedélyezéséhez. Az alkalmazások frissítésének alternatív módszere azonban az, ha az útmutató szakasz útmutatásából új alkalmazást hoz létre, és áthelyezi az alkalmazás összetevőit, osztályait és erőforrásait az új alkalmazásba.

Hitelesítési csomag

Amikor létrehoz egy alkalmazást az egyéni fiókok használatára, az alkalmazás automatikusan megkapja a csomagra vonatkozó csomaghivatkozást Microsoft.AspNetCore.Components.WebAssembly.Authentication . A csomag primitívek készletét biztosítja, amelyek segítenek az alkalmazásnak hitelesíteni a felhasználókat, és jogkivonatokat szerezni a védett API-k meghívásához.

Ha hitelesítést ad hozzá egy alkalmazáshoz, manuálisan adja hozzá a Microsoft.AspNetCore.Components.WebAssembly.Authentication csomagot az alkalmazáshoz.

Note

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.

Hitelesítési szolgáltatás támogatása

A felhasználók OpenID Connect (OIDC) használatával történő hitelesítésének támogatása a csomag által biztosított bővítménymetódussal regisztrálva van a AddOidcAuthenticationMicrosoft.AspNetCore.Components.WebAssembly.Authentication szolgáltatástárolóban.

A AddOidcAuthentication metódus egy visszahívást fogad el az alkalmazások OIDC-vel történő hitelesítéséhez szükséges paraméterek konfigurálásához. Az alkalmazás konfigurálásához szükséges értékek az OIDC-kompatibilis IP-címről kérhetők le. Az alkalmazás regisztrálásakor szerezze meg az értékeket, amelyeket általában az online portáljukon kap meg.

Új alkalmazás esetén adja meg a {AUTHORITY} és {CLIENT ID} helyőrzők értékeit az alábbi konfigurációban. Adja meg az alkalmazás IP-címéhez szükséges egyéb konfigurációs értékeket. A példa a Google, amely megköveteli PostLogoutRedirectUri, RedirectUriés ResponseType. Ha hitelesítést ad hozzá egy alkalmazáshoz, manuálisan adja hozzá a következő kódot és konfigurációt az alkalmazáshoz a helyőrzők és egyéb konfigurációs értékek értékeivel.

A Program fájlban:

builder.Services.AddOidcAuthentication(options =>
{
    builder.Configuration.Bind("Local", options.ProviderOptions);
});

wwwroot/appsettings.json konfigurációja

A konfigurációt a wwwroot/appsettings.json fájl adja meg:

{
  "Local": {
    "Authority": "{AUTHORITY}",
    "ClientId": "{CLIENT ID}"
  }
}

Hozzáférési jogkivonat hatókörei

A Blazor WebAssembly sablon automatikusan konfigurálja az alapértelmezett tartományokat a openid és profile számára.

A Blazor WebAssembly-sablon nem konfigurálja automatikusan az alkalmazást hozzáférési jogkivonat lekérésére egy biztonságos API-hoz. Ha hozzáférési jogkivonatot szeretne kiépíteni a bejelentkezési folyamat részeként, adja hozzá a hatókört a OidcProviderOptionsrendszer alapértelmezett jogkivonat-hatóköreihez. Ha hitelesítést ad hozzá egy alkalmazáshoz, manuálisan adja hozzá a következő kódot, és konfigurálja a hatókör URI-ját.

A Program fájlban:

builder.Services.AddOidcAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});

További információt a További forgatókönyvek című cikk alábbi szakaszaiban talál:

Fájl importálása

A Microsoft.AspNetCore.Components.Authorization névtér az alkalmazás teljes területén elérhetővé válik a _Imports.razor fájlon keresztül:

...
@using Microsoft.AspNetCore.Components.Authorization
...

Indexlap

Az Indexlap (wwwroot/index.html) oldal tartalmaz egy szkriptet, amely meghatározza a JavaScriptben található AuthenticationService. AuthenticationService kezeli az OIDC protokoll alacsony szintű részleteit. Az alkalmazás belsőleg meghívja a szkriptben meghatározott metódusokat a hitelesítési műveletek végrehajtásához.

<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script>

Alkalmazásösszetevő

A App összetevő (App.razor) hasonló az App alkalmazásokban található Blazor Server összetevőhöz:

  • A AuthorizeRouteView összetevő gondoskodik arról, hogy az aktuális felhasználó hozzáférhessen egy adott laphoz, vagy más módon renderelje a RedirectToLogin összetevőt.
  • A RedirectToLogin összetevő kezeli a jogosulatlan felhasználók bejelentkezési lapra való átirányítását.
  • A CascadingAuthenticationState összetevő biztosítja, hogy a AuthenticationState látható legyen az alkalmazás többi részének.
  • A AuthorizeRouteView összetevő gondoskodik arról, hogy az aktuális felhasználó hozzáférhessen egy adott laphoz, vagy más módon renderelje a RedirectToLogin összetevőt.
  • A RedirectToLogin összetevő kezeli a jogosulatlan felhasználók bejelentkezési lapra való átirányítását.

Az ASP.NET Core kiadásai során a keretrendszerben bekövetkezett változások miatt a Razor összetevő (App) App.razor jelölése nem jelenik meg ebben a szakaszban. A komponens egy adott kiadásra vonatkozó jelölésének vizsgálatához használja az alábbi megközelítések egyikét:

  • Hozzon létre egy hitelesítéshez kiépített alkalmazást a használni kívánt ASP.NET Core alapértelmezett Blazor WebAssembly projektsablonjából. Vizsgálja meg a App összetevőt (App.razor) a létrehozott alkalmazásban.

  • Vizsgálja meg a App összetevőt (App.razor) a referenciaforrás-ban. Válassza ki a verziót az ágválasztóból, és keresse meg az összetevőt az adattár ProjectTemplates mappájában, mert az az évek során áthelyeződött.

    Note

    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 közötti váltás 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.

RedirectToLogin összetevő

A RedirectToLogin összetevő (RedirectToLogin.razor):

  • Kezeli a jogosulatlan felhasználók bejelentkezési lapra való átirányítását.
  • A felhasználó által elérni kívánt aktuális URL-címet a rendszer úgy tartja karban, hogy vissza lehessen adni őket az adott oldalra, ha a hitelesítés sikeres:
    • Navigációs előzményállapot az ASP.NET Core-ban a .NET 7 vagy újabb verzióiban.
    • Lekérdezési karakterlánc az ASP.NET Core-ban .NET 6-os vagy korábbi verzió esetén.

Vizsgálja meg a RedirectToLogin összetevőt a referenciaforrás-ban. Az összetevő helye idővel megváltozott, ezért a GitHub keresőeszközei segítségével keresse meg az összetevőt.

A bejelentkezési útvonalat az alkalmazás testre szabhatja (RemoteAuthenticationApplicationPathsOptions.LogInPatha keretrendszer alapértelmezései (dotnet/aspnetcorereferenciaforrás)). A projektsablon RedirectToLogin összetevője az alapértelmezett bejelentkezési útvonalat authentication/loginhasználja.

Note

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 közötti váltás 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.

Ha egy alkalmazás testre szabja a bejelentkezési útvonalat, kövesse az alábbi módszerek egyikét:

  • Egyezzen az összetevőben lévő, rögzített sztring elérési útjára RedirectToLogin .

  • Injektáljuk RemoteAuthenticationOptions a konfigurált érték beolvasásához. Ezt a megközelítést például akkor érdemes alkalmazni, ha az elérési utat a következővel AddApiAuthorizationszabja testre: Adja hozzá a következő irányelveket az RedirectToLogin összetevő tetején:

    @using Microsoft.Extensions.Options
    @inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> RemoteOptions
    

    Módosítsa az összetevő átirányítását a OnInitialized metódusban:

    - Navigation.NavigateToLogin("authentication/login");
    + Navigation.NavigateToLogin(RemoteOptions.Get(Options.DefaultName)
    +     .AuthenticationPaths.LogInPath);
    

    Note

    Ha más útvonalak eltérnek a projektsablon vagy a keretrendszer alapértelmezett elérési útjaitól, azokat ugyanúgy kell kezelni.

LoginDisplay összetevő

A LoginDisplay összetevő (LoginDisplay.razor) a MainLayout összetevőben (MainLayout.razor) jelenik meg, és a következő viselkedéseket kezeli:

  • Hitelesített felhasználók esetén:
    • Megjeleníti az aktuális felhasználónevet.
    • A ASP.NET Core Identityfelhasználói profillapjára mutató hivatkozást kínál.
    • Egy gombot kínál az alkalmazásból való kijelentkezéshez.
  • Névtelen felhasználók számára:
    • Lehetőséget kínál a regisztrációra.
    • Lehetőséget kínál a bejelentkezésre.

A keretrendszerben a ASP.NET Core kiadásaiban bekövetkezett változások miatt ebben a szakaszban nem jelenik meg az Razor összetevőre vonatkozó LoginDisplay korrektúra. A komponens egy adott kiadásra vonatkozó jelölésének vizsgálatához használja az alábbi megközelítések egyikét:

  • Hozzon létre egy hitelesítéshez kiépített alkalmazást a használni kívánt ASP.NET Core alapértelmezett Blazor WebAssembly projektsablonjából. Vizsgálja meg a létrehozott alkalmazás LoginDisplay összetevőjét.

  • Vizsgálja meg a LoginDisplay összetevőt a referenciaforrás-ban. Az összetevő helye idővel megváltozott, ezért a GitHub keresőeszközei segítségével keresse meg az összetevőt. A Hosted egyenlő true sablontartalom kerül felhasználásra.

    Note

    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 közötti váltás 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 összetevő

A Authentication összetevő (Pages/Authentication.razor) által létrehozott oldal határozza meg a különböző hitelesítési szakaszok kezeléséhez szükséges útvonalakat.

A RemoteAuthenticatorView összetevő:

@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

<RemoteAuthenticatorView Action="@Action" />

@code {
    [Parameter]
    public string? Action { get; set; }
}

Note

Null értékű referenciatípusok (NRT-k) és a .NET-fordító nullállapotú statikus elemzése támogatott az ASP.NET Core-ban a .NET 6-os vagy újabb verziójában. A .NET 6-ban a ASP.NET Core kiadása előtt a string típus null típusú megjelölés (?) nélkül jelenik meg.

Troubleshoot

Logging

Ha engedélyezni szeretné a hibakeresést vagy a nyomkövetési naplózást a hitelesítéshezBlazor WebAssembly, tekintse meg a Blazor szakaszát, amelyben a cikk verzióválasztója ASP.NET Core a .NET 7-es vagy újabb verziójában.

Gyakori hibák

  • Az alkalmazás vagy Identity szolgáltató (IP) helytelen konfigurálása

    A leggyakoribb hibákat a helytelen konfiguráció okozza. Az alábbiakban néhány példát láthat:

    • A forgatókönyv követelményeitől függően egy hiányzó vagy helytelen szolgáltató, példány, bérlőazonosító, bérlői tartomány, ügyfélazonosító vagy átirányítási URI megakadályozza, hogy egy alkalmazás hitelesítse az ügyfeleket.
    • A helytelen kérelemtartományok megakadályozzák, hogy az ügyfelek hozzáférjenek a kiszolgáló webes API-végpontjaihoz.
    • Helytelen vagy hiányzó kiszolgálói API-engedélyek megakadályozzák, hogy az ügyfelek hozzáférjenek a kiszolgáló webes API-végpontjaihoz.
    • Az alkalmazást egy másik porton futtatják, mint ami az IP cím alkalmazásregisztrációjának átirányítási URI-jában van beállítva. Vegye figyelembe, hogy a Microsoft Entra-azonosítóhoz és egy localhost fejlesztési tesztelési címen futó alkalmazáshoz nincs szükség portra, de az alkalmazás portkonfigurációjának és a portnak, amelyen az alkalmazás fut, meg kell egyeznie a nemlocalhost címekhez.

    A cikk útmutatójának konfigurációs szakaszai példákat mutatnak a helyes konfigurációra. Gondosan ellenőrizze a cikk egyes szakaszait, hogy az alkalmazás és az IP-cím helytelenül van-e konfigurálva.

    Ha a konfiguráció helyesnek tűnik:

    • Alkalmazásnaplók elemzése.

    • Vizsgálja meg az ügyfélalkalmazás és az IP- vagy kiszolgálóalkalmazás közötti hálózati forgalmat a böngésző fejlesztői eszközeivel. Az IP vagy a kiszolgálóalkalmazás gyakran visszaad egy pontos hibaüzenetet vagy egy a probléma okára utaló üzenetet a kliensnek egy kérés után. A fejlesztői eszközökkel kapcsolatos útmutatást a következő cikkekben találja:

    • A Blazor kiadásoknál, ahol JSON Web Token (JWT) kerül alkalmazásra, dekódolja a kliens hitelesítésére vagy a szerver webes API-hoz való hozzáférésre használt token tartalmát, attól függően, hogy a probléma hol lép fel. További információ: JSON-webjogkivonat (JWT) tartalmának vizsgálata.

    A dokumentációs csapat válaszol a cikkekben szereplő dokumentumokkal kapcsolatos visszajelzésekre és hibákra (nyisson meg egy hibát a Ezen az oldalon visszajelzési szakaszból), de nem tud terméktámogatást nyújtani. Számos nyilvános támogatási fórum áll rendelkezésre az alkalmazások hibaelhárításához. A következőket javasoljuk:

    Az előző fórumok nem a Microsoft tulajdonában vagy ellenőrzése alatt állnak.

    A nem biztonsági kockázatot jelentő, nem érzékeny és nem bizalmas információt tartalmazó, reprodukálható keretrendszer hibajelentései esetén nyisson meg egy hibajelentést az ASP.NET Core termékegységnél. Ne nyisson meg egy problémát a termékegységben, amíg nem vizsgálja meg alaposan a probléma okát, és nem tudja önállóan és a közösség segítségével megoldani a problémát egy nyilvános támogatási fórumon. A termékegység nem tudja elhárítani a külső szolgáltatásokat érintő egyszerű helytelen konfiguráció vagy használati esetek miatt hibásan működő egyes alkalmazásokat. Ha egy jelentés bizalmas jellegű, vagy a kiberbűnözők által kihasználható termék biztonsági hibáját írja le, tekintse meg Biztonsági problémák és hibák jelentésével (dotnet/aspnetcore GitHub-adattár).

  • Jogosulatlan kliens az ME-ID esetében

    info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Az engedélyezés nem sikerült. Ezek a követelmények nem teljesültek: DenyAnonymousAuthorizationRequirement: Hitelesített felhasználót igényel.

    Bejelentkezési visszahívási hiba a ME-ID-ből:

    • Hiba: unauthorized_client
    • Leírás: AADB2C90058: The provided application is not configured to allow public clients.

    A hiba megoldása:

    1. Az Azure Portalon érheti el a alkalmazás jegyzékfájlját.
    2. Állítsa a allowPublicClient attribútumotnull vagy trueértékre.

Cookie-k és webhelyadatok

A cookie-k és a webhelyadatok az alkalmazásfrissítések során is megmaradhatnak, és zavarhatják a tesztelést és a hibaelhárítást. Törölje az alábbiakat, amikor alkalmazáskódot módosít, felhasználói fiókot változtat a szolgáltatónál, vagy amikor a szolgáltatói alkalmazás konfigurációját módosítja:

  • Felhasználói bejelentkezési cookie-k
  • Alkalmazás cookie-k
  • Gyorsítótárazott és tárolt webhely-adatok

Egy módszer a maradandó cookie-k és webhelyadatok tesztelés és hibaelhárítás során történő zavaró hatásának elkerülésére a következő:

  • Böngésző konfigurálása
    • Használjon egy böngészőt a teszteléshez, amely konfigurálható az összes cookie és webhelyadatok törlésére minden alkalommal, amikor a böngésző bezárul.
    • Győződjön meg arról, hogy a böngésző manuálisan vagy az IDE által bezárva van az alkalmazás, a tesztfelhasználó vagy a szolgáltató konfigurációjának bármilyen módosításához.
  • Egyéni paranccsal nyisson meg egy böngészőt InPrivate vagy Inkognitó módban a Visual Studióban:
    • Nyissa meg a Böngészés párbeszédpanelt a Visual Studio Futtatás gombjából megnyitva.
    • Válassza a Hozzáadás gombot.
    • Adja meg a böngésző elérési útját a Program mezőben. A következő végrehajtható elérési utak a Windows 10 tipikus telepítési helyei. Ha a böngésző más helyen van telepítve, vagy nem Windows 10-et használ, adja meg a böngésző végrehajtható fájljának elérési útját.
      • Microsoft Edge: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
      • Google Chrome: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
      • Mozilla Firefox: C:\Program Files\Mozilla Firefox\firefox.exe
    • Az Argumentumok mezőben adja meg azt a parancssori beállítást, amelyet a böngésző inPrivate vagy Inkognitó módban való megnyitáshoz használ. Egyes böngészőkben az alkalmazás URL-címe szükséges.
      • Microsoft Edge: Használja a -inprivate-t.
      • Google Chrome: Használja a --incognito --new-window {URL}, ahol a {URL} helyőrző a megnyitni kívánt URL-cím (például https://localhost:5001).
      • Mozilla Firefox: Használja a -private -url {URL}, ahol a {URL} helyőrző a megnyitni kívánt URL-cím (például https://localhost:5001).
    • Adjon meg egy nevet a Barátságos név mezőben. Például: Firefox Auth Testing.
    • Válassza az OK gombot.
    • Ha el szeretné kerülni, hogy az alkalmazással végzett tesztelés minden iterációja esetében ki kell választania a böngészőprofilt, állítsa be a profilt alapértelmezettként az Alapértelmezett gombbal.
    • Győződjön meg arról, hogy az IDE bezárja a böngészőt az alkalmazás, a tesztfelhasználó vagy a szolgáltató konfigurációjának bármilyen módosításához.

Alkalmazásfrissítések

A működő alkalmazások a .NET SDK fejlesztői gépen való frissítése vagy az alkalmazás csomagverzióinak módosítása után azonnal meghiúsulhatnak. Bizonyos esetekben az inkognitó csomagok megszakíthatják az alkalmazásokat a nagyobb frissítések végrehajtásakor. A legtöbb ilyen probléma az alábbi utasítások követésével javítható:

  1. Törölje a helyi rendszer NuGet-csomaggyorsítótárait a "dotnet nuget locals all --clear" parancs parancssorból történő végrehajtásával.
  2. Törölje a projekt bin és obj mappáit.
  3. Állítsa vissza és építse újra a projektet.
  4. Az alkalmazás ismételt üzembe helyezése előtt törölje a kiszolgáló üzembehelyezési mappájában lévő összes fájlt.

Note

Az alkalmazás cél-keretrendszerével nem kompatibilis csomagverziók használata nem támogatott. A csomaggal kapcsolatos információkért használja a NuGet Gallery-t.

Az Server alkalmazás futtatása

Egy üzemeltetett Blazor WebAssemblymegoldástesztelése és hibaelhárítása során győződjön meg arról, hogy az alkalmazást a Server projektből futtatja.

A felhasználó vizsgálata

A következő User összetevő közvetlenül az alkalmazásokban használható, vagy a további testreszabás alapjául szolgál.

User.razor:

@page "/user"
@attribute [Authorize]
@using System.Text.Json
@using System.Security.Claims
@inject IAccessTokenProvider AuthorizationService

<h1>@AuthenticatedUser?.Identity?.Name</h1>

<h2>Claims</h2>

@foreach (var claim in AuthenticatedUser?.Claims ?? Array.Empty<Claim>())
{
    <p class="claim">@(claim.Type): @claim.Value</p>
}

<h2>Access token</h2>

<p id="access-token">@AccessToken?.Value</p>

<h2>Access token claims</h2>

@foreach (var claim in GetAccessTokenClaims())
{
    <p>@(claim.Key): @claim.Value.ToString()</p>
}

@if (AccessToken != null)
{
    <h2>Access token expires</h2>

    <p>Current time: <span id="current-time">@DateTimeOffset.Now</span></p>
    <p id="access-token-expires">@AccessToken.Expires</p>

    <h2>Access token granted scopes (as reported by the API)</h2>

    @foreach (var scope in AccessToken.GrantedScopes)
    {
        <p>Scope: @scope</p>
    }
}

@code {
    [CascadingParameter]
    private Task<AuthenticationState> AuthenticationState { get; set; }

    public ClaimsPrincipal AuthenticatedUser { get; set; }
    public AccessToken AccessToken { get; set; }

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        var state = await AuthenticationState;
        var accessTokenResult = await AuthorizationService.RequestAccessToken();

        if (!accessTokenResult.TryGetToken(out var token))
        {
            throw new InvalidOperationException(
                "Failed to provision the access token.");
        }

        AccessToken = token;

        AuthenticatedUser = state.User;
    }

    protected IDictionary<string, object> GetAccessTokenClaims()
    {
        if (AccessToken == null)
        {
            return new Dictionary<string, object>();
        }

        // header.payload.signature
        var payload = AccessToken.Value.Split(".")[1];
        var base64Payload = payload.Replace('-', '+').Replace('_', '/')
            .PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');

        return JsonSerializer.Deserialize<IDictionary<string, object>>(
            Convert.FromBase64String(base64Payload));
    }
}

JSON-webjogkivonat (JWT) tartalmának vizsgálata

JSON-webjogkivonat (JWT) dekódolásához használja a Microsoft jwt.ms eszközét. A felhasználói felületen lévő értékek soha nem hagyják el a böngészőt.

Példa kódolt JWT -ra (a megjelenítéshez rövidítve):

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q

Az eszköz által dekódolt JWT-példa egy Azure AAD B2C-vel hitelesítő alkalmazáshoz:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1610059429,
  "nbf": 1610055829,
  "ver": "1.0",
  "iss": "https://mysiteb2c.b2clogin.com/11112222-bbbb-3333-cccc-4444dddd5555/v2.0/",
  "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
  "aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "nonce": "bbbb0000-cccc-1111-dddd-2222eeee3333",
  "iat": 1610055829,
  "auth_time": 1610055822,
  "idp": "idp.com",
  "tfp": "B2C_1_signupsignin"
}.[Signature]

További erőforrások