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


ASP.NET Core Blazor WebAssembly önálló alkalmazás védelme Microsoft-fiókokkal

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. Az aktuális kiadást lásd ennek a cikknek a .NET 9-es verziójában .

Ez a cikk bemutatja, hogyan hozhat létre egy különálló Blazor WebAssembly alkalmazást, amely Microsoft-fiókokat használ a Microsoft Entra (ME-ID) segítségével a hitelesítéshez.

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:

  • Bérlő létrehozása az Azure-ban
  • Alkalmazás regisztrálása az Azure-ban
  • Az Blazor alkalmazás létrehozása
  • Az alkalmazás futtatása

Bérlő létrehozása az Azure-ban

Kövesse a Gyorsútmutató: Bérlő beállítása útmutatásait egy bérlő létrehozásához az ME-ID-ben.

Alkalmazás regisztrálása az Azure-ban

ME-ID-alkalmazás regisztrálása:

  1. Lépjen a(z) Microsoft Entra ID az Azure-portálon. Az oldalsávon válassza ki az alkalmazásregisztrációk lehetőséget. Válassza az Új regisztrációs gombot.
  2. Adjon meg egy nevet az alkalmazáshoz (például KülönállóBlazor MS-fiókok ME-ID).
  3. A Támogatott fióktípusokrészben válassza a Bármely szervezeti könyvtár fiókjai (Bármely Microsoft Entra ID könyvtár – Több-bérlős)lehetőséget.
  4. Állítsa be az Átirányítási URI legördülő menüt az Egyoldalas alkalmazás (SPA) opción, és adja meg a következő átirányítási URI-t: https://localhost/authentication/login-callback. Ha ismeri az Azure alapértelmezett gazdagép éles átirányítási URI-ját (például azurewebsites.net) vagy az egyéni domain gazdagép (például contoso.com), az éles átirányítási URI-t hozzá lehet adni az localhost átirányítási URI-val egyidejűleg. A hozzáadott, nem:443 portokat használó produkciós átirányítási URI-k esetében mindenképpen adja meg a portszámot.
  5. Ha nem ellenőrzött közzétevői tartománythasznál, törölje a kijelölést az Engedélyek ,>opcióban, amely a rendszergazdai hozzájárulás megadását kéri az openid és az offline_access engedélyekhez, a jelölőnégyzetből. Ha a közzétevő domainja ellenőrzött, ez a jelölőnégyzet nem jelenik meg.
  6. Válassza a Regisztrálás lehetőséget.

Note

Nem szükséges megadni egy localhost ME-ID átirányítási URI portszámát. További információ: Átirányítási URI (válasz URL-cím) korlátozásai: Localhost-kivételek (Entra-dokumentáció).

Jegyezze fel az alkalmazás (ügyfél) azonosítóját (például 00001111-aaaa-2222-bbbb-3333cccc4444).

Hitelesítési>platformkonfigurációk>egyoldalas alkalmazás:

  1. Ellenőrizze, hogy a https://localhost/authentication/login-callback átirányítási URI-ja jelen van-e.
  2. Az Implicit engedélyezési szakaszban győződjön meg arról, hogy a hozzáférési tokenek és a azonosító tokenek jelölőnégyzete nincs bejelölve. Az implicit engedélyezés nem ajánlott az MSAL 2.0-s vagy újabb verzióját használó Blazor alkalmazásokhoz. További információ: Secure ASP.NET Core Blazor WebAssembly.
  3. Az alkalmazás többi alapértelmezett értéke elfogadható ehhez az élményhez.
  4. Ha módosításokat végzett, válassza a Mentés gombot.

Az Blazor alkalmazás létrehozása

Hozza létre az alkalmazást. Cserélje le a következő parancs helyőrzőit a korábban rögzített adatokra, majd hajtsa végre azt egy parancshéjban.

dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" --tenant-id "common" -o {PROJECT NAME}
Placeholder Az Azure Portal neve Example
{PROJECT NAME} BlazorSample
{CLIENT ID} Alkalmazás (ügyfél) azonosítója 00001111-aaaa-2222-bbbb-3333cccc4444

A -o|--output beállítással megadott kimeneti hely létrehoz egy projektmappát, ha az nem létezik, és a projekt nevének részévé válik.

Adjon hozzá egy pár MsalProviderOptions a openid és offline_accessDefaultAccessTokenScopesszámára:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
});

Az alkalmazás futtatása

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

  • Visual Studio
    • Nyomja meg a Futtatás gombot.
    • Használja a hibakeresés >A hibakeresés indítása opciót a menüben.
    • 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

Ha egy alkalmazás munkahelyi vagy iskolai fiókok (SingleOrg) használatára jön létre, az alkalmazás automatikusan megkapja a Microsoft Authentication Library (Microsoft.Authentication.WebAssembly.Msal) csomaghivatkozását. 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.Authentication.WebAssembly.Msal 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.

A Microsoft.Authentication.WebAssembly.Msal csomag tranzitív módon hozzáadja a Microsoft.AspNetCore.Components.WebAssembly.Authentication csomagot az alkalmazáshoz.

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

A felhasználók hitelesítésének támogatása a szolgáltatástárolóban a AddMsalAuthentication csomag által biztosított Microsoft.Authentication.WebAssembly.Msal bővítménymetódussal van regisztrálva. Ez a módszer beállítja az alkalmazásnak a Identity szolgáltatóval (IP-címmel) való interakcióhoz szükséges összes szolgáltatást.

A Program fájlban:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
});

A AddMsalAuthentication metódus egy visszahívást fogad el az alkalmazás 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 alkalmazás regisztrálásakor ME-ID konfigurációból kérhetők le.

wwwroot/appsettings.json konfigurációja

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

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/common",
    "ClientId": "{CLIENT ID}",
    "ValidateAuthority": true
  }
}

Example:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/common",
    "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
    "ValidateAuthority": true
  }
}

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

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 MsalProviderOptionsalapértelmezett hozzáférési jogkivonat-hatóköreihez:

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

Adjon meg további hatóköröket a AdditionalScopesToConsentértékhez:

options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");

Note

AdditionalScopesToConsent Microsoft Graphhoz a Microsoft Entra ID hozzájárulási felhasználói felületén keresztül, amikor egy felhasználó először a Microsoft Azure-ban regisztrált alkalmazást használ. További információkért tekintse meg: A Graph API használata ASP.NET Core Blazor WebAssembly.

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

Bejelentkezési mód

A keretrendszer alapértelmezés szerint előugró bejelentkezési módra vált, és visszavált az átirányítási bejelentkezési módra, ha egy előugró ablak nem nyitható meg. Az MSAL úgy konfigurálható, hogy átirányítási bejelentkezési módot használjon, ha a LoginModeMsalProviderOptions tulajdonságát a redirectértékre állítjuk be.

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.LoginMode = "redirect";
});

Az alapértelmezett beállítás popup, és a string értéke nem érzékeny a kis- és nagybetűkre.

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.Authentication.WebAssembly.Msal/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ásaiban történt változások miatt a Razor összetevő (App) App.razor jelölése nem jelenik meg ebben a szakaszban. Az összetevő egy adott kiadásra vonatkozó jelölésének vizsgálatához használja a következő módszerek valamelyikét: vagy.

  • 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 referencia forrásban. 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 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.

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ények állapota az ASP.NET Core rendszerben a .NET 7 vagy újabb verziók esetén.
    • A lekérdezési sztring az ASP.NET Core-ban .NET 6 vagy korábbi verziókban.

Vizsgálja meg az RedirectToLogin összetevőt a referenciaforrásban. 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 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.

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. Az összetevő egy adott kiadásra vonatkozó jelölésének vizsgálatához használja a következő módszerek valamelyikét: vagy.

  • 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 az LoginDisplay összetevőt a referenciaforrásban. 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 sablonalapú tartalmát haszná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 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 ö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

Az ASP.NET Core-ban a NULL értékű referenciatípusok (NRT-k) és a .NET fordító statikus nullállapot-elemzése a .NET 6-os vagy újabb verziókban támogatott. 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. Gyakran a kliens egy pontos hibaüzenetet vagy egy olyan üzenetet kap vissza, amely utal arra, mi okozza a problémát, miután a kérést elküldi az IP-cím vagy a kiszolgáló alkalmazás. A fejlesztői eszközökkel kapcsolatos útmutatást a következő cikkekben találja:

    • Azokon a Blazor kiadásokon, ahol JSON webjogkivonatot (JWT) használnak, dekódolja az ügyfél hitelesítéséhez vagy egy kiszolgáló webes API-hoz való hozzáféréshez használt jogkivonat tartalmát, attól függően, hogy hol jelentkezik a probléma. 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 vonatkozású, nem érzékeny és nem bizalmas, 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 ügyfél ME-ID

    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 az alkalmazáskód módosításakor, a felhasználói fiók szolgáltatónál történő módosításakor vagy a szolgáltatói alkalmazás konfigurációjának módosításakor:

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

Az elhúzódó cookie-k és webhelyadatok tesztelésbe és hibaelhárításba való beavatkozásának megakadályozására az egyik megközelítés 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 Tallózás párbeszédpanelt a Visual Studio Futtatás gombjával.
    • 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: A -inprivatehasználata.
      • 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. Tisztítsa meg a helyi rendszer NuGet csomaggyorsítótárait a dotnet nuget locals all --clear parancs végrehajtásával egy parancshéjban.
  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 Galériá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