zabezpečení Blazor WebAssembly samostatné aplikace ASP.NET Core pomocí knihovny ověřování
v případě Azure Active Directory (AAD) a Azure Active Directory B2C (AAD B2C) si nepostupte podle pokynů v tomto tématu. projděte si témata AAD a AAD B2C v tomto uzlu obsah.
Pokud chcete vytvořit samostatnou Blazor WebAssembly aplikaci , která používá Microsoft.AspNetCore.Components.WebAssembly.Authentication knihovnu, postupujte podle pokynů pro výběr nástrojů. Pokud přidáváte podporu pro ověřování, přečtěte si následující části tohoto článku, kde najdete pokyny k nastavení a konfiguraci aplikace.
Poznámka
Identityzprostředkovatel (IP) musí používat OpenID Připojení (OIDC). Například IP adresa Facebooku není poskytovatelem kompatibilním s OIDC, takže pokyny v tomto tématu nefungují s IP adresou Facebooku. Další informace naleznete v tématu Zabezpečení ASP.NET Core Blazor WebAssembly.
Vytvoření nového Blazor WebAssembly projektu s mechanismem ověřování:
po výběru šablony Blazor WebAssembly aplikace v dialogovém okně vytvořit novou webovou aplikaci ASP.NET Core vyberte v části ověřování možnost změnit .
vyberte jednotlivé uživatelské účty s možností uložit uživatelské účty v aplikaci , aby bylo možné používat Identity systém ASP.NET Core. Tento výběr přidá podporu ověřování a nevede k ukládání uživatelů do databáze. Následující části tohoto článku poskytují další podrobnosti.
Ověřovací balíček
Když je aplikace vytvořená tak, aby používala jednotlivé uživatelské účty, aplikace automaticky obdrží odkaz na balíček Microsoft.AspNetCore.Components.WebAssembly.Authentication v souboru projektu aplikace. Balíček poskytuje sadu primitivních elementů, které aplikaci pomůžou ověřit uživatele a získat tokeny pro volání chráněných rozhraní API.
Pokud se do aplikace přidává ověřování, přidejte balíček do souboru projektu aplikace ručně:
<PackageReference
Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication"
Version="{VERSION}" />
pro zástupný text je k {VERSION} dispozici nejnovější stabilní verze balíčku, která odpovídá verzi sdílené architektury aplikace, v historii verzí balíčku na adrese NuGet. org.
Podpora ověřovací služby
Podpora ověřování uživatelů je registrovaná v kontejneru služby s AddOidcAuthentication metodou rozšíření poskytovanou Microsoft.AspNetCore.Components.WebAssembly.Authentication balíčkem. Tato metoda nastavuje služby, které aplikace potřebuje k interakci se Identity zprostředkovatelem (IP).
U nové aplikace zadejte hodnoty pro {AUTHORITY} {CLIENT ID} zástupné symboly a v následující konfiguraci. Zadejte další hodnoty konfigurace, které jsou požadovány pro použití s IP adresou aplikace. Příklad je pro Google, který vyžaduje PostLogoutRedirectUri , RedirectUri a ResponseType . Pokud přidáváte do aplikace ověřování, ručně do aplikace přidejte následující kód a konfiguraci s hodnotami zástupných symbolů a dalších hodnot konfigurace.
Program.cs:
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Local", options.ProviderOptions);
});
Soubor zadal konfiguraci wwwroot/appsettings.json :
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Příklad OIDC Google OAuth 2,0:
{
"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": "id_token"
}
}
Identifikátor URI přesměrování ( https://localhost:5001/authentication/login-callback ) je zaregistrován v konzole rozhraní Google API v přihlašovacích údajích > {NAME} > autorizovaných identifikátorech URI přesměrování, kde {NAME} je název klienta aplikace v seznamu aplikací OAuth 2,0 s ID klienta v konzole rozhraní Google API.
podpora ověřování pro samostatné aplikace se nabízí pomocí Připojení OpenID (OIDC). AddOidcAuthenticationMetoda přijímá zpětné volání ke konfiguraci parametrů požadovaných k ověření aplikace pomocí OIDC. Hodnoty požadované pro konfiguraci aplikace lze získat z IP adresy kompatibilní s OIDC. Získejte hodnoty při registraci aplikace, ke kterým obvykle dochází na online portálu.
Obory přístupového tokenu
Blazor WebAssemblyŠablona automaticky konfiguruje výchozí obory pro openid a profile .
Tato Blazor WebAssembly Šablona automaticky nekonfiguruje aplikaci tak, aby požadovala přístupový token pro zabezpečené rozhraní API. Pro zřízení přístupového tokenu v rámci toku přihlášení přidejte obor do výchozích oborů tokenu OidcProviderOptions . Pokud přidáváte do aplikace ověřování, ručně přidejte následující kód a nakonfigurujte identifikátor URI oboru.
Program.cs:
builder.Services.AddOidcAuthentication(options =>
{
...
options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});
Další informace najdete v následujících částech článku o dalších scénářích :
Importovat soubor
Microsoft.AspNetCore.Components.AuthorizationObor názvů je dostupný v celé aplikaci prostřednictvím _Imports.razor souboru:
@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 (Index) obsahuje skript, který definuje v AuthenticationService JavaScriptu. AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provedení ověřovacích operací.
<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/
AuthenticationService.js"></script>
Součást aplikace
AppSoučást ( App.razor ) je podobná App komponentě, kterou najdete v Blazor Server aplikacích:
- Komponenta spravuje vystavení CascadingAuthenticationState AuthenticationState do zbytku aplikace.
- AuthorizeRouteViewKomponenta zajistí, že aktuální uživatel má oprávnění pro přístup k dané stránce nebo jinak vykreslí
RedirectToLoginsoučást. RedirectToLoginKomponenta spravuje přesměrování neautorizovaných uživatelů na přihlašovací stránku.
v důsledku změn v rozhraní napříč verzemi ASP.NET Core se Razor App App.razor v této části nezobrazí značka pro komponentu (). Chcete-li zkontrolovat označení 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
Appsoučást (App.razor) ve vygenerované aplikaci.Zkontrolujte
Appsoučást (App.razor) v referenčním zdroji.Poznámka
dokumentace odkazuje na zdrojový odkaz na ASP.NET Core načtení
mainvětve úložiště, která představuje aktuální vývoj jednotky produktu pro další verzi ASP.NET Core. Pokud chcete vybrat větev pro jinou verzi, vyberte ji pomocí rozevíracího seznamu větve přepínače nebo značky . vyberte napříkladrelease/5.0větev pro verzi ASP.NET Core 5,0.
Komponenta RedirectToLogin
RedirectToLoginSoučást ( Shared/RedirectToLogin.razor ):
- Spravuje přesměrování neautorizovaných uživatelů na přihlašovací stránku.
- Zachová aktuální adresu URL, ke které se uživatel pokouší získat přístup, aby se mohla vrátit na tuto stránku, pokud je ověření úspěšné.
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
Komponenta LoginDisplay
LoginDisplaySoučást ( Shared/LoginDisplay.razor ) je vykreslena v MainLayout komponentě ( Shared/MainLayout.razor ) a spravuje následující chování:
- Pro ověřené uživatele:
- Zobrazí aktuální uživatelské jméno.
- Nabízí tlačítko pro odhlášení od aplikace.
- Pro anonymní uživatele nabízí možnost přihlásit se.
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager
<AuthorizeView>
<Authorized>
Hello, @context.User.Identity.Name!
<button class="nav-link btn btn-link" @onclick="BeginSignOut">
Log out
</button>
</Authorized>
<NotAuthorized>
<a href="authentication/login">Log in</a>
</NotAuthorized>
</AuthorizeView>
@code {
private async Task BeginSignOut(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
Součást ověřování
Stránka vytvořená komponentou ( ) definuje trasy vyžadované Authentication pro zpracování různých fází Pages/Authentication.razor ověřování.
RemoteAuthenticatorViewKomponenta:
- Je poskytován
Microsoft.AspNetCore.Components.WebAssembly.Authenticationbalíčkem . - 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; }
}
Řešení potíží
Běžné chyby
Chybné konfigurace aplikace nebo Identity zprostředkovatele (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ěřování klientů.
- Nesprávný obor přístupového tokenu 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 identifikátoru URI přesměrování Identity registrace aplikace poskytovatele.
V částech s pokyny pro konfiguraci najdete příklady správné konfigurace. Pečlivě zkontrolujte každou část článku a zkontrolujte chybné konfigurace aplikace a IP adresy.
Pokud se konfigurace zdá být správná:
Analýza aplikačních protokolů
Prozkoumejte síťový provoz mezi klientskou aplikací a IP adresou nebo serverovou aplikací pomocí vývojářských nástrojů prohlížeče. Ip adresa nebo serverová aplikace často vrátí klientovi přesnou chybovou zprávu nebo zprávu s vodítkem k příčině problému. Vývojářské nástroje najdete v následujících článcích:
- Google Chrome (dokumentace Google)
- Microsoft Edge
- Mozilla Firefox (dokumentace Mozilla)
Dekódujte obsah souboru JWT (JSON Web Token), 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 souboru JSON WEB TOKEN (JWT).
Dokumentační tým reaguje na zpětnou vazbu k dokumentům a chyby v článcích (otevřete problém v části Tato zpětná vazba na stránce), ale nemůže poskytovat podporu k produktům. Při řešení potíží s aplikací je k dispozici několik veřejných fór podpory. Doporučujeme postupovat následovně:
Předchozí fóra nejsou vlastněna ani řízena společností Microsoft.
V případě zpráv o chybách architektury bez zabezpečení, bez citlivosti a bez důvěrných reprodukovatelných architektur otevřete problém v ASP.NET Core produktové jednotce. Neotevřete problém s produktovou jednotkou, dokud pečlivě 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 nemůž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á nebo popisuje potenciální chybu zabezpečení v produktu, kterou mohou útočníci zneužít, podívejte se na téma Hlášení problémů a chyb zabezpečení (dotnet/aspnetcore GitHub úložiště).
Neautorizovaný klient pro AAD
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Autorizace se nezdařila. Tyto požadavky nebyly splněny: DenyAnonymousAuthorizationRequirement: Vyžaduje ověřeného uživatele.
Chyba zpětného volání přihlášení z AAD:
- Chyba:
unauthorized_client - Popis:
AADB2C90058: The provided application is not configured to allow public clients.
Řešení chyby:
- V Azure Portal přístup k manifestu aplikace.
- Nastavte
allowPublicClientatribut nanullnebotrue.
- Chyba:
Cookies a data lokality
CookieData webů a se mohou uchovat napříč aktualizacemi aplikací a interferovat s testováním a řešení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 zprostředkovatele vymažte následující:
- Přihlášení cookie uživatele
- Aplikace cookie
- Uložená data lokality a uložená v mezipaměti
Jedním z přístupů, jak zabránit tomu, aby se při testování a řešení potíží přerušují cookie data lokality, je:
- Konfigurace prohlížeče
- Pro testování použijte prohlížeč, který můžete nakonfigurovat tak, aby při každém zavření prohlížeče odstranil všechna data a cookie data webu.
- Ujistěte se, že je prohlížeč ručně zavřen nebo integrované vývojové prostředí (IDE) kvůli jakékoli změně konfigurace aplikace, testovacího uživatele nebo zprostředkovatele.
- Pomocí vlastního příkazu otevřete prohlížeč v anonymním nebo privátním režimu v Visual Studio:
- V dialogovém okně Procházet Visual Studio tlačítko Spustit.
- 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ý na jiném místě nebo pokud ho 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:
- Do pole Argumenty zadejte možnost příkazového řádku, kterou prohlížeč používá k otevření v anonymním nebo privátním režimu. Některé prohlížeče vyžadují adresu URL aplikace.
- Microsoft Edge: Použijte
-inprivate. - Google Chrome: Použijte
--incognito --new-window {URL}, kde zástupný symbol je adresa URL, která se má otevřít{URL}(napříkladhttps://localhost:5001). - Mozilla Firefox: Použijte
-private -url {URL}, kde zástupný symbol je adresa URL, která se má otevřít{URL}(napříkladhttps://localhost:5001).
- Microsoft Edge: Použijte
- Do pole Popisný 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í pomocí tlačítka Nastavit jako výchozí.
- Ujistěte se, že integrované vývojové prostředí zavře prohlížeč kvůli jakékoli změně konfigurace aplikace, testovacího uživatele nebo zprostředkovatele.
Upgrady aplikací
Funkční aplikace může selhat okamžitě po upgradu .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v rámci aplikace. V některých případech může při provádění významných upgradů dojít k přerušení aplikace v neschválených balíčcích. Většinu těchto problémů můžete vyřešit pomocí těchto pokynů:
- Vymažte mezipaměť balíčků NuGet systému spuštěním příkazu
dotnet nuget locals all --clearz příkazového prostředí. - Odstraňte složky a
binobjprojektu. - Obnovte a znovu sestavte projekt.
- Před znovunasazování 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. Pokud chcete získat informace o balíčku, použijte NuGet Gallery nebo FuGet Package Explorer.
Spuštění aplikace Server
Při testování hostovaného řešení a řešení souvisejících potíží se ujistěte, že aplikaci používáte Blazor z Server projektu. Například v Visual Studio před zahájením aplikace potvrďte, že je projekt Server zvýrazněný v Průzkumník řešení, a to pomocí libovolného z následujících přístupů:
- Vyberte tlačítko Run (Spustit).
- V nabídce > použijte Ladění spustit ladění.
- Stiskněte klávesu F5.
Kontrola obsahu souboru JSON Web Token (JWT)
Pokud chcete dekódovat JSON Web Token (JWT), použijte nástroj jwt.ms Microsoftu. Hodnoty v uživatelském rozhraní nikdy neopustí váš prohlížeč.
Příklad kódovaného JWT (zkráceně pro zobrazení):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Příklad JWT dekódovaný nástrojem pro aplikaci, která se ověřuje vůči Azure AAD B2C:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"exp": 1610059429,
"nbf": 1610055829,
"ver": "1.0",
"iss": "https://mysiteb2c.b2clogin.com/5cc15ea8-a296-4aa3-97e4-226dcc9ad298/v2.0/",
"sub": "5ee963fb-24d6-4d72-a1b6-889c6e2c7438",
"aud": "70bde375-fce3-4b82-984a-b247d823a03f",
"nonce": "b2641f54-8dc4-42ca-97ea-7f12ff4af871",
"iat": 1610055829,
"auth_time": 1610055822,
"idp": "idp.com",
"tfp": "B2C_1_signupsignin"
}.[Signature]
Další zdroje informací
- Blazor WebAssemblyASP.NET Core další scénáře zabezpečení
- Neověřené nebo neautorizované požadavky webového rozhraní API v aplikaci s 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 pro:
- Použití middlewaru předávaných hlaviček k uchování informací o schématu protokolu HTTPS napříč proxy servery a interními sítěmi.
- Další scénáře a případy použití, včetně konfigurace ručního schématu, změn cest požadavků pro správné směrování požadavků a předávání schématu požadavků pro reverzní proxy servery se systémem Linux a non-IIS.
v případě Azure Active Directory (AAD) a Azure Active Directory B2C (AAD B2C) si nepostupte podle pokynů v tomto tématu. projděte si témata AAD a AAD B2C v tomto uzlu obsah.
Pokud chcete vytvořit samostatnou Blazor WebAssembly aplikaci , která používá Microsoft.AspNetCore.Components.WebAssembly.Authentication knihovnu, postupujte podle pokynů pro výběr nástrojů. Pokud přidáváte podporu pro ověřování, přečtěte si následující části tohoto článku, kde najdete pokyny k nastavení a konfiguraci aplikace.
Poznámka
Identityzprostředkovatel (IP) musí používat OpenID Připojení (OIDC). Například IP adresa Facebooku není poskytovatelem kompatibilním s OIDC, takže pokyny v tomto tématu nefungují s IP adresou Facebooku. Další informace naleznete v tématu Zabezpečení ASP.NET Core Blazor WebAssembly.
Vytvoření nového Blazor WebAssembly projektu s mechanismem ověřování:
po výběru šablony Blazor WebAssembly aplikace v dialogovém okně vytvořit novou webovou aplikaci ASP.NET Core vyberte v části ověřování možnost změnit .
vyberte jednotlivé uživatelské účty s možností uložit uživatelské účty v aplikaci , aby bylo možné používat Identity systém ASP.NET Core. Tento výběr přidá podporu ověřování a nevede k ukládání uživatelů do databáze. Následující části tohoto článku poskytují další podrobnosti.
Ověřovací balíček
Když je aplikace vytvořená tak, aby používala jednotlivé uživatelské účty, aplikace automaticky obdrží odkaz na balíček Microsoft.AspNetCore.Components.WebAssembly.Authentication v souboru projektu aplikace. Balíček poskytuje sadu primitivních elementů, které aplikaci pomůžou ověřit uživatele a získat tokeny pro volání chráněných rozhraní API.
Pokud se do aplikace přidává ověřování, přidejte balíček do souboru projektu aplikace ručně:
<PackageReference
Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication"
Version="{VERSION}" />
pro zástupný text je k {VERSION} dispozici nejnovější stabilní verze balíčku, která odpovídá verzi sdílené architektury aplikace, v historii verzí balíčku na adrese NuGet. org.
Podpora ověřovací služby
Podpora ověřování uživatelů je registrovaná v kontejneru služby s AddOidcAuthentication metodou rozšíření poskytovanou Microsoft.AspNetCore.Components.WebAssembly.Authentication balíčkem. Tato metoda nastavuje služby, které aplikace potřebuje k interakci se Identity zprostředkovatelem (IP).
U nové aplikace zadejte hodnoty pro {AUTHORITY} {CLIENT ID} zástupné symboly a v následující konfiguraci. Zadejte další hodnoty konfigurace, které jsou požadovány pro použití s IP adresou aplikace. Příklad je pro Google, který vyžaduje PostLogoutRedirectUri , RedirectUri a ResponseType . Pokud přidáváte do aplikace ověřování, ručně do aplikace přidejte následující kód a konfiguraci s hodnotami zástupných symbolů a dalších hodnot konfigurace.
Program.cs:
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Local", options.ProviderOptions);
});
Soubor zadal konfiguraci wwwroot/appsettings.json :
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Příklad OIDC Google OAuth 2,0:
{
"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": "id_token"
}
}
Identifikátor URI přesměrování ( https://localhost:5001/authentication/login-callback ) je zaregistrován v konzole rozhraní Google API v přihlašovacích údajích > {NAME} > autorizovaných identifikátorech URI přesměrování, kde {NAME} je název klienta aplikace v seznamu aplikací OAuth 2,0 s ID klienta v konzole rozhraní Google API.
podpora ověřování pro samostatné aplikace se nabízí pomocí Připojení OpenID (OIDC). AddOidcAuthenticationMetoda přijímá zpětné volání ke konfiguraci parametrů požadovaných k ověření aplikace pomocí OIDC. Hodnoty požadované pro konfiguraci aplikace lze získat z IP adresy kompatibilní s OIDC. Získejte hodnoty při registraci aplikace, ke kterým obvykle dochází na online portálu.
Obory přístupového tokenu
Blazor WebAssemblyŠablona automaticky konfiguruje výchozí obory pro openid a profile .
Tato Blazor WebAssembly Šablona automaticky nekonfiguruje aplikaci tak, aby požadovala přístupový token pro zabezpečené rozhraní API. Pro zřízení přístupového tokenu v rámci toku přihlášení přidejte obor do výchozích oborů tokenu OidcProviderOptions . Pokud přidáváte do aplikace ověřování, ručně přidejte následující kód a nakonfigurujte identifikátor URI oboru.
Program.cs:
builder.Services.AddOidcAuthentication(options =>
{
...
options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});
Další informace najdete v následujících částech článku o dalších scénářích :
Importovat soubor
Microsoft.AspNetCore.Components.AuthorizationObor názvů je dostupný v celé aplikaci prostřednictvím _Imports.razor souboru:
@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 (Index) obsahuje skript, který definuje v AuthenticationService JavaScriptu. AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provedení ověřovacích operací.
<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/
AuthenticationService.js"></script>
Součást aplikace
AppSoučást ( App.razor ) je podobná App komponentě, kterou najdete v Blazor Server aplikacích:
- Komponenta spravuje vystavení CascadingAuthenticationState AuthenticationState do zbytku aplikace.
- AuthorizeRouteViewKomponenta zajistí, že aktuální uživatel má oprávnění pro přístup k dané stránce nebo jinak vykreslí
RedirectToLoginsoučást. RedirectToLoginKomponenta spravuje přesměrování neautorizovaných uživatelů na přihlašovací stránku.
v důsledku změn v rozhraní napříč verzemi ASP.NET Core se Razor App App.razor v této části nezobrazí značka pro komponentu (). Chcete-li zkontrolovat označení 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
Appsoučást (App.razor) ve vygenerované aplikaci.Zkontrolujte
Appsoučást (App.razor) v referenčním zdroji.Poznámka
dokumentace odkazuje na zdrojový odkaz na ASP.NET Core načtení
mainvětve úložiště, která představuje aktuální vývoj jednotky produktu pro další verzi ASP.NET Core. Pokud chcete vybrat větev pro jinou verzi, vyberte ji pomocí rozevíracího seznamu větve přepínače nebo značky . vyberte napříkladrelease/5.0větev pro verzi ASP.NET Core 5,0.
Komponenta RedirectToLogin
RedirectToLoginSoučást ( Shared/RedirectToLogin.razor ):
- Spravuje přesměrování neautorizovaných uživatelů na přihlašovací stránku.
- Zachová aktuální adresu URL, ke které se uživatel pokouší získat přístup, aby se mohla vrátit na tuto stránku, pokud je ověření úspěšné.
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
Komponenta LoginDisplay
LoginDisplaySoučást ( Shared/LoginDisplay.razor ) je vykreslena v MainLayout komponentě ( Shared/MainLayout.razor ) a spravuje následující chování:
- Pro ověřené uživatele:
- Zobrazí aktuální uživatelské jméno.
- Nabízí tlačítko pro odhlášení od aplikace.
- Pro anonymní uživatele nabízí možnost přihlásit se.
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager
<AuthorizeView>
<Authorized>
Hello, @context.User.Identity.Name!
<button class="nav-link btn btn-link" @onclick="BeginSignOut">
Log out
</button>
</Authorized>
<NotAuthorized>
<a href="authentication/login">Log in</a>
</NotAuthorized>
</AuthorizeView>
@code {
private async Task BeginSignOut(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
Součást ověřování
Stránka vytvořená komponentou ( ) definuje trasy vyžadované Authentication pro zpracování různých fází Pages/Authentication.razor ověřování.
RemoteAuthenticatorViewKomponenta:
- Je poskytován
Microsoft.AspNetCore.Components.WebAssembly.Authenticationbalíčkem . - 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; }
}
Řešení potíží
Běžné chyby
Chybné konfigurace aplikace nebo Identity zprostředkovatele (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ěřování klientů.
- Nesprávný obor přístupového tokenu 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 identifikátoru URI přesměrování Identity registrace aplikace poskytovatele.
V částech s pokyny pro konfiguraci najdete příklady správné konfigurace. Pečlivě zkontrolujte každou část článku a zkontrolujte chybné konfigurace aplikace a IP adresy.
Pokud se konfigurace zdá být správná:
Analýza aplikačních protokolů
Prozkoumejte síťový provoz mezi klientskou aplikací a IP adresou nebo serverovou aplikací pomocí vývojářských nástrojů prohlížeče. Ip adresa nebo serverová aplikace často vrátí klientovi přesnou chybovou zprávu nebo zprávu s vodítkem k příčině problému. Vývojářské nástroje najdete v následujících článcích:
- Google Chrome (dokumentace Google)
- Microsoft Edge
- Mozilla Firefox (dokumentace Mozilla)
Dekódujte obsah souboru JWT (JSON Web Token), 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 souboru JSON WEB TOKEN (JWT).
Dokumentační tým reaguje na zpětnou vazbu k dokumentům a chyby v článcích (otevřete problém v části Tato zpětná vazba na stránce), ale nemůže poskytovat podporu k produktům. Při řešení potíží s aplikací je k dispozici několik veřejných fór podpory. Doporučujeme postupovat následovně:
Předchozí fóra nejsou vlastněna ani řízena společností Microsoft.
V případě zpráv o chybách architektury bez zabezpečení, bez citlivosti a bez důvěrných reprodukovatelných architektur otevřete problém v ASP.NET Core produktové jednotce. Neotevřete problém s produktovou jednotkou, dokud pečlivě 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 nemůž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á nebo popisuje potenciální chybu zabezpečení v produktu, kterou mohou útočníci zneužít, podívejte se na téma Hlášení problémů a chyb zabezpečení (dotnet/aspnetcore GitHub úložiště).
Neautorizovaný klient pro AAD
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Autorizace se nezdařila. Tyto požadavky nebyly splněny: DenyAnonymousAuthorizationRequirement: Vyžaduje ověřeného uživatele.
Chyba zpětného volání přihlášení z AAD:
- Chyba:
unauthorized_client - Popis:
AADB2C90058: The provided application is not configured to allow public clients.
Řešení chyby:
- V Azure Portal přístup k manifestu aplikace.
- Nastavte
allowPublicClientatribut nanullnebotrue.
- Chyba:
Cookies a data lokality
CookieData webů a se mohou uchovat napříč aktualizacemi aplikací a interferovat s testováním a řešení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 zprostředkovatele vymažte následující:
- Přihlášení cookie uživatele
- Aplikace cookie
- Uložená data lokality a uložená v mezipaměti
Jedním z přístupů, jak zabránit tomu, aby se při testování a řešení potíží přerušují cookie data lokality, je:
- Konfigurace prohlížeče
- Pro testování použijte prohlížeč, který můžete nakonfigurovat tak, aby při každém zavření prohlížeče odstranil všechna data a cookie data webu.
- Ujistěte se, že je prohlížeč ručně zavřen nebo integrované vývojové prostředí (IDE) kvůli jakékoli změně konfigurace aplikace, testovacího uživatele nebo zprostředkovatele.
- Pomocí vlastního příkazu otevřete prohlížeč v anonymním nebo privátním režimu v Visual Studio:
- V dialogovém okně Procházet Visual Studio tlačítko Spustit.
- 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ý na jiném místě nebo pokud ho 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:
- Do pole Argumenty zadejte možnost příkazového řádku, kterou prohlížeč používá k otevření v anonymním nebo privátním režimu. Některé prohlížeče vyžadují adresu URL aplikace.
- Microsoft Edge: Použijte
-inprivate. - Google Chrome: Použijte
--incognito --new-window {URL}, kde zástupný symbol je adresa URL, která se má otevřít{URL}(napříkladhttps://localhost:5001). - Mozilla Firefox: Použijte
-private -url {URL}, kde zástupný symbol je adresa URL, která se má otevřít{URL}(napříkladhttps://localhost:5001).
- Microsoft Edge: Použijte
- Do pole Popisný 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í pomocí tlačítka Nastavit jako výchozí.
- Ujistěte se, že integrované vývojové prostředí zavře prohlížeč kvůli jakékoli změně konfigurace aplikace, testovacího uživatele nebo zprostředkovatele.
Upgrady aplikací
Funkční aplikace může selhat okamžitě po upgradu .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v rámci aplikace. V některých případech může při provádění významných upgradů dojít k přerušení aplikace v neschválených balíčcích. Většinu těchto problémů můžete vyřešit pomocí těchto pokynů:
- Vymažte mezipaměť balíčků NuGet systému spuštěním příkazu
dotnet nuget locals all --clearz příkazového prostředí. - Odstraňte složky a
binobjprojektu. - Obnovte a znovu sestavte projekt.
- Před znovunasazování 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. Pokud chcete získat informace o balíčku, použijte NuGet Gallery nebo FuGet Package Explorer.
Spuštění aplikace Server
Při testování hostovaného řešení a řešení souvisejících potíží se ujistěte, že aplikaci používáte Blazor z Server projektu. Například v Visual Studio před zahájením aplikace potvrďte, že je projekt Server zvýrazněný v Průzkumník řešení, a to pomocí libovolného z následujících přístupů:
- Vyberte tlačítko Run (Spustit).
- V nabídce > použijte Ladění spustit ladění.
- Stiskněte klávesu F5.
Kontrola obsahu souboru JSON Web Token (JWT)
Pokud chcete dekódovat JSON Web Token (JWT), použijte nástroj jwt.ms Microsoftu. Hodnoty v uživatelském rozhraní nikdy neopustí váš prohlížeč.
Příklad kódovaného JWT (zkráceně pro zobrazení):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Příklad JWT dekódovaný nástrojem pro aplikaci, která se ověřuje vůči Azure AAD B2C:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"exp": 1610059429,
"nbf": 1610055829,
"ver": "1.0",
"iss": "https://mysiteb2c.b2clogin.com/5cc15ea8-a296-4aa3-97e4-226dcc9ad298/v2.0/",
"sub": "5ee963fb-24d6-4d72-a1b6-889c6e2c7438",
"aud": "70bde375-fce3-4b82-984a-b247d823a03f",
"nonce": "b2641f54-8dc4-42ca-97ea-7f12ff4af871",
"iat": 1610055829,
"auth_time": 1610055822,
"idp": "idp.com",
"tfp": "B2C_1_signupsignin"
}.[Signature]
Další zdroje informací
- Blazor WebAssemblyASP.NET Core další scénáře zabezpečení
- Neověřené nebo neautorizované požadavky webového rozhraní API v aplikaci s 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 pro:
- Použití middlewaru předávaných hlaviček k uchování informací o schématu protokolu HTTPS napříč proxy servery a interními sítěmi.
- Další scénáře a případy použití, včetně konfigurace ručního schématu, změn cest požadavků pro správné směrování požadavků a předávání schématu požadavků pro reverzní proxy servery se systémem Linux a non-IIS.
v případě Azure Active Directory (AAD) a Azure Active Directory B2C (AAD B2C) si nepostupte podle pokynů v tomto tématu. projděte si témata AAD a AAD B2C v tomto uzlu obsah.
Pokud chcete vytvořit samostatnou Blazor WebAssembly aplikaci , která používá Microsoft.AspNetCore.Components.WebAssembly.Authentication knihovnu, postupujte podle pokynů pro výběr nástrojů. Pokud přidáváte podporu pro ověřování, přečtěte si následující části tohoto článku, kde najdete pokyny k nastavení a konfiguraci aplikace.
Poznámka
Identityzprostředkovatel (IP) musí používat OpenID Připojení (OIDC). Například IP adresa Facebooku není poskytovatelem kompatibilním s OIDC, takže pokyny v tomto tématu nefungují s IP adresou Facebooku. Další informace naleznete v tématu Zabezpečení ASP.NET Core Blazor WebAssembly.
Vytvoření nového Blazor WebAssembly projektu s mechanismem ověřování:
po výběru šablony Blazor WebAssembly aplikace v dialogovém okně vytvořit novou webovou aplikaci ASP.NET Core vyberte v části ověřování možnost změnit .
vyberte jednotlivé uživatelské účty s možností uložit uživatelské účty v aplikaci , aby bylo možné používat Identity systém ASP.NET Core. Tento výběr přidá podporu ověřování a nevede k ukládání uživatelů do databáze. Následující části tohoto článku poskytují další podrobnosti.
Ověřovací balíček
Když je aplikace vytvořená tak, aby používala jednotlivé uživatelské účty, aplikace automaticky obdrží odkaz na balíček Microsoft.AspNetCore.Components.WebAssembly.Authentication v souboru projektu aplikace. Balíček poskytuje sadu primitivních elementů, které aplikaci pomůžou ověřit uživatele a získat tokeny pro volání chráněných rozhraní API.
Pokud se do aplikace přidává ověřování, přidejte balíček do souboru projektu aplikace ručně:
<PackageReference
Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication"
Version="{VERSION}" />
pro zástupný text je k {VERSION} dispozici nejnovější stabilní verze balíčku, která odpovídá verzi sdílené architektury aplikace, v historii verzí balíčku na adrese NuGet. org.
Podpora ověřovací služby
Podpora ověřování uživatelů je registrovaná v kontejneru služby s AddOidcAuthentication metodou rozšíření poskytovanou Microsoft.AspNetCore.Components.WebAssembly.Authentication balíčkem. Tato metoda nastavuje služby, které aplikace potřebuje k interakci se Identity zprostředkovatelem (IP).
U nové aplikace zadejte hodnoty pro {AUTHORITY} {CLIENT ID} zástupné symboly a v následující konfiguraci. Zadejte další hodnoty konfigurace, které jsou požadovány pro použití s IP adresou aplikace. Příklad je pro Google, který vyžaduje PostLogoutRedirectUri , RedirectUri a ResponseType . Pokud přidáváte do aplikace ověřování, ručně do aplikace přidejte následující kód a konfiguraci s hodnotami zástupných symbolů a dalších hodnot konfigurace.
Program.cs:
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("Local", options.ProviderOptions);
});
Soubor zadal konfiguraci wwwroot/appsettings.json :
{
"Local": {
"Authority": "{AUTHORITY}",
"ClientId": "{CLIENT ID}"
}
}
Příklad OIDC Google OAuth 2,0:
{
"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": "id_token"
}
}
Identifikátor URI přesměrování ( https://localhost:5001/authentication/login-callback ) je zaregistrován v konzole rozhraní Google API v přihlašovacích údajích > {NAME} > autorizovaných identifikátorech URI přesměrování, kde {NAME} je název klienta aplikace v seznamu aplikací OAuth 2,0 s ID klienta v konzole rozhraní Google API.
podpora ověřování pro samostatné aplikace se nabízí pomocí Připojení OpenID (OIDC). AddOidcAuthenticationMetoda přijímá zpětné volání ke konfiguraci parametrů požadovaných k ověření aplikace pomocí OIDC. Hodnoty požadované pro konfiguraci aplikace lze získat z IP adresy kompatibilní s OIDC. Získejte hodnoty při registraci aplikace, ke kterým obvykle dochází na online portálu.
Obory přístupového tokenu
Blazor WebAssemblyŠablona automaticky konfiguruje výchozí obory pro openid a profile .
Tato Blazor WebAssembly Šablona automaticky nekonfiguruje aplikaci tak, aby požadovala přístupový token pro zabezpečené rozhraní API. Pro zřízení přístupového tokenu v rámci toku přihlášení přidejte obor do výchozích oborů tokenu OidcProviderOptions . Pokud přidáváte do aplikace ověřování, ručně přidejte následující kód a nakonfigurujte identifikátor URI oboru.
Program.cs:
builder.Services.AddOidcAuthentication(options =>
{
...
options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});
Další informace najdete v následujících částech článku o dalších scénářích :
Importovat soubor
Microsoft.AspNetCore.Components.AuthorizationObor názvů je dostupný v celé aplikaci prostřednictvím _Imports.razor souboru:
@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 (Index) obsahuje skript, který definuje v AuthenticationService JavaScriptu. AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provedení ověřovacích operací.
<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/
AuthenticationService.js"></script>
Součást aplikace
AppSoučást ( App.razor ) je podobná App komponentě, kterou najdete v Blazor Server aplikacích:
- Komponenta spravuje vystavení CascadingAuthenticationState AuthenticationState do zbytku aplikace.
- AuthorizeRouteViewKomponenta zajistí, že aktuální uživatel má oprávnění pro přístup k dané stránce nebo jinak vykreslí
RedirectToLoginsoučást. RedirectToLoginKomponenta spravuje přesměrování neautorizovaných uživatelů na přihlašovací stránku.
v důsledku změn v rozhraní napříč verzemi ASP.NET Core se Razor App App.razor v této části nezobrazí značka pro komponentu (). Chcete-li zkontrolovat označení 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
Appsoučást (App.razor) ve vygenerované aplikaci.Zkontrolujte
Appsoučást (App.razor) v referenčním zdroji.Poznámka
dokumentace odkazuje na zdrojový odkaz na ASP.NET Core načtení
mainvětve úložiště, která představuje aktuální vývoj jednotky produktu pro další verzi ASP.NET Core. Pokud chcete vybrat větev pro jinou verzi, vyberte ji pomocí rozevíracího seznamu větve přepínače nebo značky . vyberte napříkladrelease/5.0větev pro verzi ASP.NET Core 5,0.
Komponenta RedirectToLogin
RedirectToLoginSoučást ( Shared/RedirectToLogin.razor ):
- Spravuje přesměrování neautorizovaných uživatelů na přihlašovací stránku.
- Zachová aktuální adresu URL, ke které se uživatel pokouší získat přístup, aby se mohla vrátit na tuto stránku, pokud je ověření úspěšné.
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
Komponenta LoginDisplay
LoginDisplaySoučást ( Shared/LoginDisplay.razor ) je vykreslena v MainLayout komponentě ( Shared/MainLayout.razor ) a spravuje následující chování:
- Pro ověřené uživatele:
- Zobrazí aktuální uživatelské jméno.
- Nabízí tlačítko pro odhlášení z aplikace.
- Anonymní uživatelé mají možnost se přihlásit.
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager
<AuthorizeView>
<Authorized>
Hello, @context.User.Identity.Name!
<button class="nav-link btn btn-link" @onclick="BeginSignOut">
Log out
</button>
</Authorized>
<NotAuthorized>
<a href="authentication/login">Log in</a>
</NotAuthorized>
</AuthorizeView>
@code {
private async Task BeginSignOut(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
Ověřovací komponenta
Stránka vytvořená komponentou ( ) definuje trasy vyžadované Authentication pro zpracování různých fází Pages/Authentication.razor ověřování.
RemoteAuthenticatorViewKomponenta:
- Je poskytován
Microsoft.AspNetCore.Components.WebAssembly.Authenticationbalíčkem . - 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; }
}
Řešení potíží
Běžné chyby
Chybné konfigurace aplikace nebo Identity zprostředkovatele (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ěřování klientů.
- Nesprávný obor přístupového tokenu 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 identifikátoru URI přesměrování Identity registrace aplikace poskytovatele.
V částech s pokyny pro konfiguraci najdete příklady správné konfigurace. Pečlivě zkontrolujte každou část článku a zkontrolujte chybné konfigurace aplikace a IP adresy.
Pokud se konfigurace zdá být správná:
Analýza aplikačních protokolů
Prozkoumejte síťový provoz mezi klientskou aplikací a IP adresou nebo serverovou aplikací pomocí vývojářských nástrojů prohlížeče. Ip adresa nebo serverová aplikace často vrátí klientovi přesnou chybovou zprávu nebo zprávu s vodítkem k příčině problému. Vývojářské nástroje najdete v následujících článcích:
- Google Chrome (dokumentace Google)
- Microsoft Edge
- Mozilla Firefox (dokumentace Mozilla)
Dekódujte obsah souboru JWT (JSON Web Token), 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 souboru JSON WEB TOKEN (JWT).
Dokumentační tým reaguje na zpětnou vazbu k dokumentům a chyby v článcích (otevřete problém v části Tato zpětná vazba na stránce), ale nemůže poskytovat podporu k produktům. Při řešení potíží s aplikací je k dispozici několik veřejných fór podpory. Doporučujeme postupovat následovně:
Předchozí fóra nejsou vlastněna ani řízena společností Microsoft.
V případě zpráv o chybách architektury bez zabezpečení, bez citlivosti a bez důvěrných reprodukovatelných architektur otevřete problém v ASP.NET Core produktové jednotce. Neotevřete problém s produktovou jednotkou, dokud pečlivě 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 nemůž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á nebo popisuje potenciální chybu zabezpečení v produktu, kterou mohou útočníci zneužít, podívejte se na téma Hlášení problémů a chyb zabezpečení (dotnet/aspnetcore GitHub úložiště).
Neautorizovaný klient pro AAD
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Autorizace se nezdařila. Tyto požadavky nebyly splněny: DenyAnonymousAuthorizationRequirement: Vyžaduje ověřeného uživatele.
Chyba zpětného volání přihlášení z AAD:
- Chyba:
unauthorized_client - Popis:
AADB2C90058: The provided application is not configured to allow public clients.
Řešení chyby:
- V Azure Portal přístup k manifestu aplikace.
- Nastavte
allowPublicClientatribut nanullnebotrue.
- Chyba:
Cookies a data lokality
CookieData webů a se mohou uchovat napříč aktualizacemi aplikací a interferovat s testováním a řešení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 zprostředkovatele vymažte následující:
- Přihlášení cookie uživatele
- Aplikace cookie
- Uložená data lokality a uložená v mezipaměti
Jedním z přístupů, jak zabránit tomu, aby se při testování a řešení potíží přerušují cookie data lokality, je:
- Konfigurace prohlížeče
- Pro testování použijte prohlížeč, který můžete nakonfigurovat tak, aby při každém zavření prohlížeče odstranil všechna data a cookie data webu.
- Ujistěte se, že je prohlížeč ručně zavřen nebo integrované vývojové prostředí (IDE) kvůli jakékoli změně konfigurace aplikace, testovacího uživatele nebo zprostředkovatele.
- Pomocí vlastního příkazu otevřete prohlížeč v anonymním nebo privátním režimu v Visual Studio:
- V dialogovém okně Procházet Visual Studio tlačítko Spustit.
- 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ý na jiném místě nebo pokud ho 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:
- Do pole Argumenty zadejte možnost příkazového řádku, kterou prohlížeč používá k otevření v anonymním nebo privátním režimu. Některé prohlížeče vyžadují adresu URL aplikace.
- Microsoft Edge: Použijte
-inprivate. - Google Chrome: Použijte
--incognito --new-window {URL}, kde zástupný symbol je adresa URL, která se má otevřít{URL}(napříkladhttps://localhost:5001). - Mozilla Firefox: Použijte
-private -url {URL}, kde zástupný symbol je adresa URL, která se má otevřít{URL}(napříkladhttps://localhost:5001).
- Microsoft Edge: Použijte
- Do pole Popisný 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í pomocí tlačítka Nastavit jako výchozí.
- Ujistěte se, že integrované vývojové prostředí zavře prohlížeč kvůli jakékoli změně konfigurace aplikace, testovacího uživatele nebo zprostředkovatele.
Upgrady aplikací
Funkční aplikace může selhat okamžitě po upgradu .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v rámci aplikace. V některých případech může při provádění významných upgradů dojít k přerušení aplikace v neschválených balíčcích. Většinu těchto problémů můžete vyřešit pomocí těchto pokynů:
- Vymažte mezipaměť balíčků NuGet systému spuštěním příkazu
dotnet nuget locals all --clearz příkazového prostředí. - Odstraňte složky a
binobjprojektu. - Obnovte a znovu sestavte projekt.
- Před znovunasazování 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. Pokud chcete získat informace o balíčku, použijte NuGet Gallery nebo FuGet Package Explorer.
Spuštění aplikace Server
Při testování hostovaného řešení a řešení souvisejících potíží se ujistěte, že aplikaci používáte Blazor z Server projektu. Například v Visual Studio před zahájením aplikace potvrďte, že je projekt Server zvýrazněný v Průzkumník řešení, a to pomocí libovolného z následujících přístupů:
- Vyberte tlačítko Run (Spustit).
- V nabídce > použijte Ladění spustit ladění.
- Stiskněte klávesu F5.
Kontrola obsahu souboru JSON Web Token (JWT)
Pokud chcete dekódovat JSON Web Token (JWT), použijte nástroj jwt.ms Microsoftu. Hodnoty v uživatelském rozhraní nikdy neopustí váš prohlížeč.
Příklad kódovaného JWT (zkráceně pro zobrazení):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Příklad JWT dekódovaný nástrojem pro aplikaci, která se ověřuje vůči Azure AAD B2C:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"exp": 1610059429,
"nbf": 1610055829,
"ver": "1.0",
"iss": "https://mysiteb2c.b2clogin.com/5cc15ea8-a296-4aa3-97e4-226dcc9ad298/v2.0/",
"sub": "5ee963fb-24d6-4d72-a1b6-889c6e2c7438",
"aud": "70bde375-fce3-4b82-984a-b247d823a03f",
"nonce": "b2641f54-8dc4-42ca-97ea-7f12ff4af871",
"iat": 1610055829,
"auth_time": 1610055822,
"idp": "idp.com",
"tfp": "B2C_1_signupsignin"
}.[Signature]
Další zdroje informací
- Blazor WebAssemblyASP.NET Core další scénáře zabezpečení
- 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 pro:
- Použití middlewaru forwarded headers k zachování informací schématu HTTPS mezi 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žadavků pro linuxové a jiné reverzní servery než IIS.