Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Note
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Warning
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Pro aktuální vydání si přečtěte verzi tohoto článku o .NET 9.
Tento článek vysvětluje, jak vytvořit samostatnou Blazor WebAssembly aplikaci, která k ověřování používá účty Microsoft s Microsoft Entra (ME-ID).
Pro další zajištění bezpečnostních scénářů po přečtení tohoto článku navštivte další bezpečnostní scénáře v ASP.NET CoreBlazor WebAssembly.
Walkthrough
Pododdíly návodu vysvětlují, jak:
- Vytvoření tenanta v Azure
- Registrace aplikace v Azure
- Blazor Vytvoření aplikace
- Spustit aplikaci
Vytvoření tenanta v Azure
Postupujte podle pokynů v rychlém startu: Nastavte tenanta pro vytvoření tenanta v ME-ID.
Registrace aplikace v Azure
Registrace aplikace ME-ID:
- V Azure portálu přejděte na Microsoft Entra ID. Na bočním panelu vyberte Registrace aplikací. Vyberte tlačítko Nová registrace.
- Zadejte Název aplikace (například BlazorStandalone ME-ID MS Accounts).
- V Podporovaných typech účtů vyberte Účty v jakémkoli organizačním adresáři (jakýkoli adresář Microsoft Entra ID – Více tenantní).
- Nastavte rozevírací seznam pro Přesměrovací URI na Jednostránková aplikace (SPA) a zadejte následující přesměrovací URI:
https://localhost/authentication/login-callback. Pokud znáte identifikátor URI přesměrování produkčního prostředí pro výchozího hostitele Azure (napříkladazurewebsites.net) nebo vlastního hostitele domény (napříkladcontoso.com), můžete také přidat identifikátor URI přesměrování produkčního prostředí současně s identifikátoremlocalhostURI přesměrování. Nezapomeňte zahrnout číslo portu pro ne-:443porty do všech identifikátorů URI pro přesměrování, které přidáte v produkčním prostředí. - Pokud používáte neověřenou doménu vydavatele, zrušte zaškrtnutí políčka Oprávnění>udělit správci souhlas s oprávněním openid a offline_access. Pokud je doména vydavatele ověřená, toto políčko není k dispozici.
- Vyberte Zaregistrovat.
Note
Zadání čísla portu pro URI přesměrování ME-ID není povinné. Další informace najdete v tématu Omezení URI pro přesměrování (URL pro odpověď): Výjimky localhost (dokumentace k Entra).
Poznamenejte si ID aplikace (klienta) (například 00001111-aaaa-2222-bbbb-3333cccc4444).
V ověřování>konfiguracích platformy>jednostránková aplikace:
- Ověřte, že identifikátor URI přesměrování
https://localhost/authentication/login-callbackje k dispozici. - V části Implicitní udělení se ujistěte, že nejsou zaškrtnutá políčka pro přístupové tokeny a tokeny ID. Implicitní udělení se nedoporučuje pro Blazor aplikace, které používají MSAL verze 2.0 nebo vyšší. Další informace najdete v tématu Zabezpečení ASP.NET Core Blazor WebAssembly.
- Zbývající výchozí hodnoty pro aplikaci jsou pro toto prostředí přijatelné.
- Pokud jste provedli změny, vyberte tlačítko Uložit.
Blazor Vytvoření aplikace
Vytvořte aplikaci. Zástupné symboly v následujícím příkazu nahraďte informacemi zaznamenanými dříve a spusťte následující příkaz v příkazovém prostředí:
dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" --tenant-id "common" -o {PROJECT NAME}
| Placeholder | Název webu Azure Portal | Example |
|---|---|---|
{PROJECT NAME} |
— | BlazorSample |
{CLIENT ID} |
ID aplikace (klienta) | 00001111-aaaa-2222-bbbb-3333cccc4444 |
Výstupní umístění zadané pomocí -o|--output možnosti vytvoří složku projektu, pokud neexistuje, a stane se součástí názvu projektu.
Přidejte dvojici MsalProviderOptions pro openid a offline_accessDefaultAccessTokenScopes:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
});
Spustit aplikaci
Ke spuštění aplikace použijte jeden z následujících přístupů:
- Visual Studio
- Vyberte tlačítko Run (Spustit).
- V nabídce použijte
ladění Spustit ladění . - Stiskněte klávesu F5.
- Příkazové prostředí .NET CLI: Spusťte
dotnet watchpříkaz (nebodotnet run) ze složky aplikace.
Části aplikace
Tato část popisuje části aplikace vygenerované ze Blazor WebAssembly šablony projektu a způsob konfigurace aplikace. Pokud jste aplikaci vytvořili pomocí pokynů v části Návod , není v této části potřeba postupovat podle konkrétních pokynů. Pokyny v této části jsou užitečné pro aktualizaci aplikace pro ověřování a autorizaci uživatelů. Alternativním přístupem k aktualizaci aplikace je ale vytvoření nové aplikace z pokynů v části Návod a přesun komponent, tříd a prostředků aplikace do nové aplikace.
Ověřovací balíček
Když je aplikace vytvořená pro použití pracovních nebo školních účtů (SingleOrg), aplikace automaticky obdrží odkaz na balíček pro knihovnu Microsoft Authentication Library (Microsoft.Authentication.WebAssembly.Msal). Balíček poskytuje sadu primitiv, které aplikaci pomáhají ověřovat uživatele a získávat tokeny pro volání chráněných rozhraní API.
Pokud do aplikace přidáváte ověřování, přidejte balíček Microsoft.Authentication.WebAssembly.Msal do aplikace ručně.
Note
Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.
Balíček Microsoft.Authentication.WebAssembly.Msal tranzitivně přidá Microsoft.AspNetCore.Components.WebAssembly.Authentication do aplikace.
Podpora ověřovací služby
Podpora ověřování uživatelů je zaregistrovaná v kontejneru služby pomocí AddMsalAuthentication metody rozšíření poskytované balíčkem Microsoft.Authentication.WebAssembly.Msal . Tato metoda nastaví všechny služby, které aplikace potřebuje pro interakci s poskytovatelem Identity (IP).
V souboru Program:
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
});
Metoda AddMsalAuthentication přijímá zpětné volání ke konfiguraci parametrů potřebných k ověření aplikace. Hodnoty vyžadované pro konfiguraci aplikace se dají získat z konfigurace ME-ID při registraci aplikace.
Konfigurace wwwroot/appsettings.json
Konfigurace je poskytována souborem wwwroot/appsettings.json :
{
"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
}
}
Obory přístupového tokenu
Šablona Blazor WebAssembly automaticky nenakonfiguruje aplikaci tak, aby požadovala přístupový token pro zabezpečené rozhraní API. Pokud chcete vytvořit přístupový token jako součást procesu přihlašování, přidejte obor do výchozích oborů přístupového tokenu MsalProviderOptions.
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Zadejte další obory pomocí AdditionalScopesToConsent:
options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");
Note
AdditionalScopesToConsent Microsoft Graph prostřednictvím uživatelského rozhraní souhlasu Microsoft Entra ID, když uživatel poprvé použije aplikaci zaregistrovanou v Microsoft Azure. Další informace najdete v tématu Použití rozhraní Graph API s ASP.NET Core Blazor WebAssembly.
Další informace najdete v následujících částech článku Další scénáře :
- Vyžádání dalších přístupových tokenů
- Připojení tokenů k odchozím požadavkům
- Rychlý start: Konfigurace aplikace pro zveřejnění webových rozhraní API
Režim přihlášení
Ve výchozím nastavení je režim přihlášení nastaven na automaticky otevírané okno a pokud se toto okno nepodaří otevřít, přepne se na režim přesměrování. Nakonfigurujte MSAL tak, aby používal režim přesměrování přihlášení nastavením LoginMode vlastnosti MsalProviderOptions na redirect:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.LoginMode = "redirect";
});
Výchozí nastavení je popupa u hodnoty řetězce se nerozlišují malá a velká písmena.
Import souboru
Obor názvů Microsoft.AspNetCore.Components.Authorization je dostupný v celé aplikaci prostřednictvím souboru _Imports.razor.
...
@using Microsoft.AspNetCore.Components.Authorization
...
Indexová stránka
Stránka Index (wwwroot/index.html) obsahuje skript, který definuje v JavaScriptu AuthenticationService .
AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provádění ověřovacích operací.
<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
Komponenta aplikace
Komponenta App (App.razor) se podobá komponentě App nalezené v Blazor Server aplikacích:
- Komponenta AuthorizeRouteView zajišťuje, že aktuální uživatel má oprávnění pro přístup k dané stránce, nebo jinak vykresluje komponentu
RedirectToLogin. - Komponenta
RedirectToLoginspravuje přesměrování neoprávněných uživatelů na přihlašovací stránku.
- Komponenta CascadingAuthenticationState spravuje zpřístupnění AuthenticationState do zbytku aplikace.
- Komponenta AuthorizeRouteView zajišťuje, že aktuální uživatel má oprávnění pro přístup k dané stránce, nebo jinak vykresluje komponentu
RedirectToLogin. - Komponenta
RedirectToLoginspravuje přesměrování neoprávněných uživatelů na přihlašovací stránku.
Vzhledem ke změnám v rámci napříč verzemi ASP.NET Core Razor, značení pro komponentu App (App.razor) není v této části zobrazeno. Pokud chcete zkontrolovat kód komponenty pro danou verzi, použijte některý z následujících přístupů:
Vytvořte aplikaci zřízenou pro ověřování z výchozí Blazor WebAssembly šablony projektu pro verzi ASP.NET Core, kterou chcete použít. Zkontrolujte komponentu
App(App.razor) ve vygenerované aplikaci.Zkontrolujte komponentu (
App) v referenčnímApp.razorzdroji. Vyberte verzi ze selektoru větve a vyhledejte komponentu veProjectTemplatessložce úložiště, protože se v průběhu let přesunula.Note
Odkazy na dokumentaci k referenčnímu zdroji .NET obvykle načítají výchozí větev úložiště, která představuje aktuální vývoj pro příští verzi .NET. Pokud chcete vybrat značku pro konkrétní verzi, použijte rozevírací seznam pro přepnutí větví nebo značek. Další informace najdete v tématu Jak vybrat značku verze zdrojového kódu ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Komponenta RedirectToLogin
Komponenta RedirectToLogin (RedirectToLogin.razor):
- Spravuje přesměrování neoprávněných uživatelů na přihlašovací stránku.
- Aktuální adresa URL, ke které se uživatel pokouší získat přístup, je udržována tak, aby se v případě úspěšného ověření vrátila na tuto stránku:
- Stav historie navigace v ASP.NET Core v .NET 7 nebo novějším
- Řetězec dotazu v ASP.NET Core v .NET 6 nebo starší.
Zkontrolujte komponentu v referenčním RedirectToLogin zdroji. Umístění komponenty se v průběhu času změnilo, proto k vyhledání komponenty použijte vyhledávací nástroje GitHubu.
Přihlašovací cestu může aplikace přizpůsobit (RemoteAuthenticationApplicationPathsOptions.LogInPathdotnet/aspnetcorereferenční zdroj)). Komponenta RedirectToLogin šablony projektu používá výchozí přihlašovací cestu authentication/login.
Note
Odkazy na dokumentaci k referenčnímu zdroji .NET obvykle načítají výchozí větev úložiště, která představuje aktuální vývoj pro příští verzi .NET. Pokud chcete vybrat značku pro konkrétní verzi, použijte rozevírací seznam pro přepnutí větví nebo značek. Další informace najdete v tématu Jak vybrat značku verze zdrojového kódu ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Pokud aplikace přizpůsobí cestu přihlášení, použijte některý z následujících přístupů:
Porovná cestu v pevně zakódovaném řetězci v komponentě
RedirectToLogin.Vložením RemoteAuthenticationOptions získáte nakonfigurovanou hodnotu. Tento přístup použijte například při přizpůsobení cesty pomocí AddApiAuthorization. Na začátek
RedirectToLoginkomponenty přidejte následující direktivy:@using Microsoft.Extensions.Options @inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> RemoteOptionsUpravte přesměrování komponenty v
OnInitializedmetodě:- Navigation.NavigateToLogin("authentication/login"); + Navigation.NavigateToLogin(RemoteOptions.Get(Options.DefaultName) + .AuthenticationPaths.LogInPath);Note
Pokud se jiné cesty liší od cest šablony projektu nebo výchozích cest architektury, měly by se spravovat stejným způsobem.
Komponenta LoginDisplay
Komponenta LoginDisplay (LoginDisplay.razor) je vykreslena v komponentě MainLayout (MainLayout.razor) a spravuje následující chování:
- Pro ověřené uživatele:
- Zobrazí aktuální uživatelské jméno.
- Nabízí odkaz na stránku profilu uživatele v ASP.NET Core Identity.
- Nabízí tlačítko pro odhlášení z aplikace.
- Anonymní uživatelé:
- Nabízí možnost registrace.
- Nabízí možnost přihlášení.
V této části se kvůli změnám v rozhraní napříč verzemi ASP.NET Core nezobrazuje značení komponenty Razor. Pokud chcete zkontrolovat kód komponenty pro danou verzi, použijte některý z následujících přístupů:
Vytvořte aplikaci zřízenou pro ověřování z výchozí Blazor WebAssembly šablony projektu pro verzi ASP.NET Core, kterou chcete použít. Zkontrolujte komponentu
LoginDisplayve vygenerované aplikaci.Zkontrolujte komponentu v referenčním
LoginDisplayzdroji. Umístění komponenty se v průběhu času změnilo, proto k vyhledání komponenty použijte vyhledávací nástroje GitHubu. Použije se šablonovaný obsah proHostedrovnýtrue.Note
Odkazy na dokumentaci k referenčnímu zdroji .NET obvykle načítají výchozí větev úložiště, která představuje aktuální vývoj pro příští verzi .NET. Pokud chcete vybrat značku pro konkrétní verzi, použijte rozevírací seznam pro přepnutí větví nebo značek. Další informace najdete v tématu Jak vybrat značku verze zdrojového kódu ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Komponenta ověřování
Stránka vytvořená komponentou Authentication (Pages/Authentication.razor) definuje trasy potřebné pro zpracování různých fází ověřování.
Komponenta RemoteAuthenticatorView :
- Je poskytováno balíčkem
Microsoft.AspNetCore.Components.WebAssembly.Authentication. - Spravuje provádění příslušných akcí v každé fázi ověřování.
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />
@code {
[Parameter]
public string? Action { get; set; }
}
Note
Odkazové typy s hodnotou null (NRT) a statická analýza stavu null kompilátorem .NET jsou podporovány v ASP.NET Core v .NET 6 nebo novější verzi. Před vydáním verze ASP.NET Core v .NET 6 se typ string zobrazuje bez označení typu null (?).
Troubleshoot
Logging
Pokud chcete povolit protokolování ladění nebo trasování pro Blazor WebAssembly ověřování, přečtěte si část protokolování ověřování na straně klientaASP.NET Core Blazor s výběrem verze článku nastavit na ASP.NET Core v .NET 7 nebo novějším.
Běžné chyby
Chybná konfigurace aplikace nebo Identity poskytovatele (IP)
Nejčastější chyby jsou způsobené nesprávnou konfigurací. Tady je několik příkladů:
- V závislosti na požadavcích scénáře brání chybějící nebo nesprávná autorita, instance, ID tenanta, doména tenanta, ID klienta nebo identifikátor URI přesměrování aplikaci v ověření klientů.
- Nesprávné obory požadavků brání klientům v přístupu ke koncovým bodům webového rozhraní API serveru.
- Nesprávná nebo chybějící oprávnění rozhraní API serveru brání klientům v přístupu ke koncovým bodům webového rozhraní API serveru.
- Aplikaci spouštíte na jiném portu, než je nakonfigurováno v přesměrovací URI v registraci aplikace pro IP. Všimněte si, že port není vyžadován pro Microsoft Entra ID a aplikaci spuštěnou na adrese
localhostpro testování vývoje, ale konfigurace portu aplikace a port, na kterém je aplikace spuštěná, se musí shodovat pro ne-localhostadresy.
V konfiguračních částech pokynů tohoto článku uvádí příklady správné konfigurace. Pečlivě zkontrolujte každou část článku, ve které hledáte chybnou konfiguraci aplikace a IP adresy.
Pokud se konfigurace zobrazí správně:
Analyzujte protokoly aplikace.
Prozkoumejte síťový provoz mezi klientskou aplikací a IP nebo serverovou aplikací pomocí vývojářských nástrojů prohlížeče. Často je přesná chybová zpráva nebo zpráva s povědomím o příčině problému vrácena klientovi ip adresou nebo serverovou aplikací po provedení požadavku. Pokyny k vývojářským nástrojům najdete v následujících článcích:
- Google Chrome (dokumentace Google)
- Microsoft Edge
- Mozilla Firefox (dokumentace k Mozilla)
U verzí Blazor , ve kterých se používá webový token JSON (JWT), dekódujte obsah tokenu, který se používá k ověřování klienta nebo přístupu k webovému rozhraní API serveru, v závislosti na tom, kde k problému dochází. Další informace najdete v tématu Kontrola obsahu webového tokenu JSON (JWT).
Tým dokumentace reaguje na zpětnou vazbu a chyby v článcích (otevřete problém ze sekce Tato stránka), ale nemůže poskytnout podporu produktů. K dispozici je několik veřejných fór podpory, která vám pomůžou s řešením potíží s aplikací. Doporučujeme následující:
Předchozí fóra nejsou vlastněna ani řízena Společností Microsoft.
V případě reprodukovatelných hlášení o chybách v rámci, které nejsou bezpečnostní, citlivé ani důvěrné, otevřete problém s jednotkou produktu ASP.NET Core. Neotevírejte problém s produktovou jednotkou, dokud důkladně neprošetříte příčinu problému a nemůžete ho vyřešit sami a s pomocí komunity na veřejném fóru podpory. Produktová jednotka nedokáže řešit potíže s jednotlivými aplikacemi, které jsou poškozené kvůli jednoduché chybné konfiguraci nebo případům použití zahrnujícím služby třetích stran. Pokud je sestava citlivá nebo důvěrné povahy, nebo popisuje potenciální chybu zabezpečení v produktu, kterou mohou kyberútočníci zneužít, viz Hlášení problémů se zabezpečením a chyb (
dotnet/aspnetcorev úložišti GitHub).Neautorizovaný klient pro ME-ID
info: Autorizace Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] selhala. Tyto požadavky nebyly splněny: DenyAnonymousAuthorizationRequirement: Vyžaduje ověřeného uživatele.
Chyba zpětného volání přihlášení z ME-ID:
- Chyba:
unauthorized_client - Popis:
AADB2C90058: The provided application is not configured to allow public clients.
Řešení chyby:
- Na webu Azure Portal přejděte k manifestu aplikace.
-
allowPublicClientNastavte atribut nanullnebotrue.
- Chyba:
Soubory cookie a data webu
Soubory cookie a data webu se můžou uchovávat v aktualizacích aplikací a kolidovat s testováním a odstraňováním potíží. Při provádění změn kódu aplikace, změn uživatelského účtu u poskytovatele nebo změn konfigurace aplikace poskytovatele zrušte následující:
- Soubory cookie přihlašování uživatelů
- Soubory cookie aplikace
- Data lokality v mezipaměti a uložená data
Jedním z přístupů k tomu, aby se zabránilo zasahování souborů cookie a dat webu do testování a řešení potíží, je:
- Konfigurace prohlížeče
- K testování můžete použít prohlížeč, který můžete nakonfigurovat tak, aby při každém zavření prohlížeče odstranil všechna cookie data a data webu.
- Ujistěte se, že prohlížeč je zavřený ručně nebo pomocí integrovaného vývojového prostředí (IDE) při jakékoli změně aplikace, testovacího uživatele nebo konfigurace poskytovatele.
- Pomocí vlastního příkazu otevřete prohlížeč v režimu InPrivate nebo Incognito v sadě Visual Studio:
- Otevřete dialogové okno Procházet s tlačítkem Spustit ze sady Visual Studio.
- Vyberte tlačítko Přidat.
- Do pole Program zadejte cestu k prohlížeči. Následující spustitelné cesty jsou typická umístění instalace pro Windows 10. Pokud je váš prohlížeč nainstalovaný v jiném umístění nebo nepoužíváte Windows 10, zadejte cestu ke spustitelnému souboru prohlížeče.
- 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
- Microsoft Edge:
-
V poli Argumenty zadejte možnost příkazového řádku, kterou prohlížeč používá k otevření v režimu InPrivate nebo Anonymní režim. Některé prohlížeče vyžadují adresu URL aplikace.
- Microsoft Edge: Použijte
-inprivate. - Google Chrome: Použijte
--incognito --new-window {URL}, kde{URL}zástupce je URL adresa, kterou chcete otevřít (napříkladhttps://localhost:5001). - Mozilla Firefox: Použijte
-private -url {URL}, kde je{URL}zástupný symbol pro adresu URL, kterou chcete otevřít (napříkladhttps://localhost:5001).
- Microsoft Edge: Použijte
- Zadejte název do pole Uživatelsky přívětivé jméno. Například
Firefox Auth Testing. - Vyberte tlačítko OK.
- Pokud se chcete vyhnout výběru profilu prohlížeče pro každou iteraci testování pomocí aplikace, nastavte profil jako výchozí tlačítkem Nastavit jako výchozí .
- Ujistěte se, že integrované vývojové prostředí (IDE) zavře prohlížeč při jakékoli změně v aplikaci, pro testovacího uživatele nebo konfiguraci poskytovatele.
Upgrady aplikací
Funkční aplikace může selhat okamžitě po upgradu sady .NET SDK na vývojovém počítači nebo změně verzí balíčků v aplikaci. V některých případech můžou inkoherentní balíčky přerušit aplikaci při provádění hlavních upgradů. Většinu těchto problémů je možné vyřešit pomocí těchto pokynů:
- Vymažte mezipaměti balíčků NuGet místního systému spuštěním
dotnet nuget locals all --clearz příkazového prostředí. - Odstraňte složky projektu
binaobj. - Obnovte a znovu sestavte projekt.
- Před opětovným nasazením aplikace odstraňte všechny soubory ve složce nasazení na serveru.
Note
Použití verzí balíčků nekompatibilních s cílovou architekturou aplikace se nepodporuje. Informace o balíčku najdete v galerii NuGet.
Server Spuštění aplikace
Při testování a řešení potíží s hostovaným Blazor WebAssemblyřešením se ujistěte, že aplikaci spouštíte z Server projektu.
Kontrola uživatele
Následující User komponentu lze použít přímo v aplikacích nebo sloužit jako základ pro další přizpůsobení.
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));
}
}
Kontrola obsahu webového tokenu JSON (JWT)
K dekódování webového tokenu JSON (JWT) použijte nástroj microsoftu jwt.ms . Hodnoty v uživatelském rozhraní nikdy neopustí prohlížeč.
Příklad kódovaného JWT (zkrácený pro zobrazení):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Příklad dekódování JWT nástrojem pro aplikaci, která se ověřuje v Azure AAD B2C:
{
"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]
Dodatečné zdroje
- Další scénáře zabezpečení ASP.NET Core Blazor WebAssembly
- Sestavení vlastní verze knihovny Authentication.MSAL JavaScript
- Neověřené nebo neoprávněné požadavky webového rozhraní API v aplikaci se zabezpečeným výchozím klientem
- ASP.NET Core Blazor WebAssembly s ID skupinami a rolemi Microsoft Entra
- Rychlý start: Registrace aplikace v platformě identity Microsoft
- Rychlý start: Konfigurace aplikace pro zveřejnění webových rozhraní API