Zabezpečení samostatné aplikace ASP.NET Core Blazor WebAssembly pomocí knihovny ověřování
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi tohoto článku najdete ve verzi .NET 9.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Pro aktuální vydání si přečtěte verzi tohoto článku pro .NET 9.
Tento článek vysvětluje, jak zabezpečit samostatnou aplikaci ASP.NET Core Blazor WebAssembly pomocí Blazor WebAssembly knihovny ověřování.
Blazor WebAssembly Ověřovací knihovna (Authentication.js
) podporuje pouze tok autorizačního kódu PKCE (Proof Key for Code Exchange) prostřednictvím knihovny Microsoft Authentication Library (MSAL, msal.js
). Pokud chcete implementovat další toky udělení, získejte přístup k pokynům MSAL k přímé implementaci pomocí MSAL, ale nepodporujeme ani nedoporučujeme použití toků udělení jiných než PKCE pro Blazor aplikace.
Pro pokyny týkající se Microsoft Entra (ME-ID) a Azure Active Directory B2C (AAD B2C) tyto pokyny v tomto tématu nesledujte. Viz Zabezpečení samostatné aplikace ASP.NET Core Blazor WebAssembly pomocí Microsoft Entra ID nebo zabezpečení samostatné aplikace ASP.NET Core Blazor WebAssembly pomocí Azure Active Directory B2C.
Po přečtení tohoto článku najdete další pokrytí scénářů zabezpečení v tématu ASP.NET Core Blazor WebAssembly další scénáře zabezpečení.
Průvodce
Pododdíly návodu vysvětlují, jak:
- Registrace aplikace
- Blazor Vytvoření aplikace
- Spustit aplikaci
Registrace aplikace
Zaregistrujte aplikaci u poskytovatele OpenID Connect (OIDC)Identity podle pokynů poskytovaných správcem IP adresy.
Poznamenejte si následující informace:
- Autorita (například
https://accounts.google.com/
). - ID aplikace (klienta) (například
2...7-e...q.apps.googleusercontent.com
). - Další konfigurace PROTOKOLU IP (viz dokumentace k PROTOKOLU IP).
Poznámka:
IP adresa musí používat identifikátor OIDC. Ip adresa facebooku například není poskytovatelem kompatibilním se standardem OIDC, takže pokyny v tomto tématu nefungují s IP adresou facebooku. Další informace najdete v tématu Zabezpečení ASP.NET Core Blazor WebAssembly.
Blazor Vytvoření aplikace
Pokud chcete vytvořit samostatnou Blazor WebAssemblyaplikaci, která knihovnu Microsoft.AspNetCore.Components.WebAssembly.Authentication
používá, postupujte podle pokynů pro váš výběr nástrojů. Pokud přidáváte podporu ověřování, přečtěte si část Části aplikace tohoto článku, kde najdete pokyny k nastavení a konfiguraci aplikace.
Vytvoření nového Blazor WebAssembly projektu pomocí mechanismu ověřování:
Po výběru Blazor WebAssembly šablony aplikace nastavte typ ověřování na jednotlivé účty.
Po výběru Blazor WebAssembly šablony aplikace nastavte typ ověřování na jednotlivé účty. Ověřte, že není zaškrtnuté políčko ASP.NET Core Hosted.
Výběr jednotlivých účtů používá systém ASP.NET Core Identity . Tento výběr přidává podporu ověřování a nemá za následek ukládání uživatelů do databáze. Další podrobnosti najdete v následujících částech tohoto článku.
Konfigurace aplikace
Nakonfigurujte aplikaci podle pokynů k IP adrese. Minimálně aplikace vyžaduje nastavení konfigurace Local:Authority
a Local:ClientId
ve wwwroot/appsettings.json
souboru aplikace.
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Příklad Google OAuth 2.0 OIDC pro aplikaci, která běží na localhost
adrese na portu 5001:
{
"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"
}
}
Identifikátor URI pro přesměrování (https://localhost:5001/authentication/login-callback
) je zaregistrovaný v konzoli Rozhraní API Google v Přihlašovacích údajích, v Autorizovaných přesměrovacích URI, kde {NAME}
je jméno klienta aplikace v seznamu Identifikátorů klienta OAuth 2.0 konzole Rozhraní API Google.
Poznámka:
Zadání čísla portu pro localhost
URI přesměrování se nevyžaduje u některých IP adres OIDC podle specifikace OAuth 2.0. Některé IP adresy umožňují, aby přesměrovací URI pro zpětné smyčky vynechaly port. Jiné umožňují použití zástupného znaku pro číslo portu (například *
). Další informace najdete v dokumentaci k IP adrese.
Spustit aplikaci
Ke spuštění aplikace použijte jeden z následujících přístupů:
- Visual Studio
- Vyberte tlačítko Run (Spustit).
- Použijte v nabídce Debug>Spustit ladění.
- Stiskněte klávesu F5.
- Příkazové prostředí .NET CLI: Spusťte
dotnet watch
pří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á tak, aby používala jednotlivé uživatelské účty, aplikace automaticky obdrží odkaz na Microsoft.AspNetCore.Components.WebAssembly.Authentication
balíček. 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.AspNetCore.Components.WebAssembly.Authentication
do aplikace ručně.
Poznámka:
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.
Podpora ověřovací služby
Podpora ověřování uživatelů pomocí OpenID Connect (OIDC) je zaregistrovaná v kontejneru služby pomocí AddOidcAuthentication metody rozšíření poskytované balíčkem Microsoft.AspNetCore.Components.WebAssembly.Authentication
.
Metoda AddOidcAuthentication přijímá zpětné volání ke konfiguraci parametrů potřebných k ověření aplikace pomocí OIDC. Hodnoty vyžadované pro konfiguraci aplikace je možné získat z IP adresy kompatibilní s OIDC. Získejte hodnoty, když registrujete aplikaci, což se obvykle děje na jejich online portálu.
V případě nové aplikace zadejte hodnoty pro tyto zástupné znaky {AUTHORITY}
a {CLIENT ID}
v následující konfiguraci. Zadejte další hodnoty konfigurace, které jsou potřeba pro použití s IP adresou aplikace. Příkladem je Google, který vyžaduje PostLogoutRedirectUri
, RedirectUri
a ResponseType
. Pokud do aplikace přidáváte ověřování, přidejte do aplikace ručně následující kód a konfiguraci s hodnotami zástupných symbolů a dalších konfiguračních hodnot.
V souboru Program
:
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Local", options.ProviderOptions);
});
Konfigurace wwwroot/appsettings.json
Konfigurace je poskytována souborem wwwroot/appsettings.json
:
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Obory přístupového tokenu
Šablona Blazor WebAssembly automaticky konfiguruje výchozí obory pro openid
a profile
.
Šablona Blazor WebAssembly automaticky nenakonfiguruje aplikaci tak, aby požadovala přístupový token pro zabezpečené rozhraní API. Pokud chcete zřídit přístupový token jako součást toku přihlašování, přidejte obor do výchozích oborů tokenů objektu OidcProviderOptions. Pokud do aplikace přidáváte ověřování, ručně vložte následující kód a nakonfigurujte URI rozsahu.
V souboru Program
:
builder.Services.AddOidcAuthentication(options =>
{
...
options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});
Další informace najdete v následujících částech článku Další scénáře :
Import souboru
Názvový obor Microsoft.AspNetCore.Components.Authorization je dostupný v celé aplikaci pomocí souboru _Imports.razor
.
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using {APPLICATION ASSEMBLY}
@using {APPLICATION ASSEMBLY}.Shared
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.AspNetCore.Components.WebAssembly.Authentication/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, jinak vykresluje komponentu
RedirectToLogin
. - Komponenta
RedirectToLogin
spravuje přesměrování neoprávněných uživatelů na přihlašovací stránku.
- Komponenta CascadingAuthenticationState spravuje zpřístupnění AuthenticationState zbytku aplikace.
- Komponenta AuthorizeRouteView zajišťuje, že aktuální uživatel má oprávnění pro přístup k dané stránce nebo že komponentu
RedirectToLogin
jinak vykresluje. - Komponenta
RedirectToLogin
spravuje přesměrování neoprávněných uživatelů na přihlašovací stránku.
Vzhledem ke změnám v rozhraní napříč verzemi ASP.NET Core se značky pro komponentu App
(App.razor
) v této části nezobrazují. 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.razor
zdroji. Vyberte verzi ze selektoru větve a vyhledejte komponentu veProjectTemplates
složce úložiště, protože se v průběhu let přesunula.Poznámka:
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.
Poznámka:
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řepínání 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 LoginDisplay
Komponenta LoginDisplay
(LoginDisplay.razor
) se vykreslí 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í.
Vzhledem ke změnám v rozhraní napříč verzemi ASP.NET Core není značení komponenty LoginDisplay
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
LoginDisplay
ve vygenerované aplikaci.Zkontrolujte komponentu v referenčním
LoginDisplay
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. Šablonovaný obsah proHosted
, který se rovnátrue
, se použije.Poznámka:
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án 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; }
}
Poznámka:
Typy odkazů s možnou hodnotou null (NRT) a statické analýzy stavu null kompilátorem .NET jsou podporovány v ASP.NET Core od verze .NET 6 nebo novější. Před vydáním ASP.NET Core v prostředí .NET 6 se typ string
zobrazí bez označení typu null (?
).
Odstraňování potíží
Protokolování
Pokud chcete povolit protokolování ladění nebo trasování pro Blazor WebAssembly ověřování, podívejte se na část Protokolování ověřování na straně klienta v sekci Protokolování v ASP.NET Core Blazor s voličem verze článku nastaveným na ASP.NET Core 7.0 nebo novější.
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 nemůže aplikace ověřit klienty, pokud chybí nebo je nesprávná autorita, instance, ID tenanta, doména tenanta, ID klienta nebo identifikátor URI přesměrování.
- 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.
- Spuštění aplikace na jiném portu, než je nakonfigurovaný v přesměrovacím URI pro registraci aplikace IP. Všimněte si, že port není nutný pro Microsoft Entra ID a aplikaci spuštěnou na adrese pro testování vývoje
localhost
, ale konfigurace portu aplikace a port, na kterém je aplikace spuštěná, se musí shodovat pro ne-localhost
adresy.
V sekcích konfigurace týkajících se pokynů v tomto článku jsou podrobně zobrazeny 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 (nahlásit problém z oddílu Na této stránce), ale nemůže poskytnout podporu pro produkty. 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ě zpráv o chybách rozhraní, které nejsou zabezpečené, citlivé ani důvěrné, otevřete problém s produktovou jednotkou 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 zpráva citlivá nebo důvěrná nebo popisuje potenciální bezpečnostní chybu v produktu, kterou mohou kyberútočníci zneužít, podívejte se na Hlášení problémů a chyb se zabezpečením (
dotnet/aspnetcore
úložiště 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.
-
allowPublicClient
Nastavte atribut nanull
nebotrue
.
- 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
- Uložená data webu v mezipaměti a uložená data stránky
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 je prohlížeč zavřen ručně uživatelem nebo prostřednictvím 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 pomocí tlačítka Spustit v sadě 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}
je adresa URL, kterou chcete otevřít (napříkladhttps://localhost:5001
). - Mozilla Firefox: Použijte
-private -url {URL}
, kde je zástupný znak{URL}
adresou URL k otevření (napříkladhttps://localhost:5001
).
- Microsoft Edge: Použijte
- Do pole Přátelský název zadejte název. 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ékoliv změně aplikace, testovacího uživatele nebo konfigurace poskytovatele.
Upgrady aplikací
Funkční aplikace může selhat okamžitě po upgradu sady .NET Core 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 --clear
z příkazového prostředí. - Odstraňte složky
bin
aobj
projektu. - Obnovte a znovu sestavte projekt.
- Před opětovným nasazením aplikace odstraňte všechny soubory ve složce nasazení na serveru.
Poznámka:
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]
Další materiály
- Další scénáře zabezpečení ASP.NET Core Blazor WebAssembly
- Neověřené nebo neoprávněné požadavky webového rozhraní API v aplikaci se zabezpečeným výchozím klientem
-
Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení: Obsahuje pokyny k:
- Použití middlewaru Forwarded Headers k zachování informací o schématu HTTPS napříč proxy servery a interními sítěmi
- Další scénáře a případy použití, včetně ruční konfigurace schématu, změn cesty požadavku pro správné směrování požadavků a předávání schématu požadavku pro linuxové reverzní proxy servery a ne-IIS reverzní proxy servery.