zabezpečení Blazor WebAssembly samostatné aplikace v ASP.NET Core s využitím Azure Active Directory

tento článek popisuje, jak vytvořit samostatnou Blazor WebAssembly aplikaci , která pro ověřování používá Azure Active Directory (AAD) .

Poznámka

pro Blazor WebAssembly aplikace vytvořené v Visual Studio, které jsou nakonfigurované pro podporu účtů v AAD organizačním adresáři s Identity platformou Microsoft, použijte Visual Studio verze 16,10 nebo novější, aby se vytvořila aplikace se správnou konfigurací Azure. pokud používáte verzi Visual Studio starší než 16,10, je po vytvoření aplikace nutné ručně aktualizovat konfiguraci aplikace podle každé části tohoto článku .

registrace aplikace AAD:

  1. v Azure Portal přejděte na Azure Active Directory . Na bočním panelu vyberte Registrace aplikací . Klikněte na tlačítko Nová registrace .
  2. Zadejte název aplikace (například Blazor samostatné AAD).
  3. Vyberte podporované typy účtů. Účty v tomto organizačním adresáři můžete vybrat jenom pro toto prostředí.
  4. Rozevírací seznam identifikátor URI pro přesměrování nastavte na JEDNOSTRÁNKOVOU aplikaci (Spa) a zadejte následující identifikátor URI pro přesměrování: https://localhost:{PORT}/authentication/login-callback . Výchozí port pro aplikaci běžící v systému Kestrel je 5001. Pokud je aplikace spuštěná na jiném Kestrel portu, použijte port aplikace. pro IIS Express se náhodně generovaný port pro aplikaci dá najít ve vlastnostech aplikace na panelu ladění . vzhledem k tomu, že aplikace v tomto okamžiku neexistuje a port IIS Express není znám, vraťte se k tomuto kroku po vytvoření aplikace a aktualizaci identifikátoru URI přesměrování. po přeznačení se objeví dál v tomto tématu, které připomínat IIS Express uživatelům aktualizovat identifikátor URI přesměrování.
  5. Pokud používáte neověřenou doménu vydavatele, zrušte zaškrtnutí políčka oprávnění > udělit souhlas správce oprávnění OpenID a offline_access . Pokud je ověřena doména vydavatele, toto zaškrtávací políčko není k dispozici.
  6. Vyberte Zaregistrovat.

Zaznamenejte následující informace:

  • ID aplikace (klienta) (například 41451fa7-82d9-4673-8fa5-69eff5a761fd )
  • ID adresáře (tenanta) (například e86c78e2-8bb4-4c41-aefd-918e0565a45e )

V > > aplikaci Single-Page konfigurace platformy ověřování (Spa):

  1. Ověřte, zda je identifikátor URI přesměrování k https://localhost:{PORT}/authentication/login-callback dispozici.
  2. U implicitního udělení zajistěte, aby se pro přístupové tokeny a tokeny ID nevybrali zaškrtávací políčka.
  3. Zbývající výchozí hodnoty pro aplikaci jsou pro toto prostředí přijatelné.
  4. Vyberte tlačítko Uložit.

Vytvořte aplikaci v prázdné složce. Zástupné symboly v následujícím příkazu nahraďte dříve zaznamenanými informacemi a spusťte příkaz v příkazovém prostředí:

dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" -o {APP NAME} --tenant-id "{TENANT ID}"
Zástupný symbol Název Azure Portal Příklad
{APP NAME} BlazorSample
{CLIENT ID} ID aplikace (klienta) 41451fa7-82d9-4673-8fa5-69eff5a761fd
{TENANT ID} ID adresáře (tenanta) e86c78e2-8bb4-4c41-aefd-918e0565a45e

Umístění výstupu zadané s -o|--output možností vytvoří složku projektu, pokud neexistuje a bude součástí názvu aplikace.

Poznámka

V Azure Portal je identifikátor URI pro přesměrování konfigurace platformy aplikace nakonfigurovaný pro port 5001 pro aplikace, které běží na Kestrel serveru s výchozími nastaveními.

pokud je aplikace spuštěná na náhodném IIS Expressm portu, můžete port pro aplikaci najít ve vlastnostech aplikace na panelu ladění .

Pokud port nebyl dříve nakonfigurovaný se známým portem aplikace, vraťte se k registraci aplikace v Azure Portal a aktualizujte identifikátor URI přesměrování pomocí správného portu.

Přidejte MsalProviderOptions pro oprávnění pomocí User.Read DefaultAccessTokenScopes :

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
});

Po vytvoření aplikace byste měli mít tyto možnosti:

Ověřovací balíček

Když je aplikace vytvořená tak, aby používala pracovní nebo školní účty ( SingleOrg ), aplikace automaticky obdrží odkaz na balíček pro knihovnu Microsoft Authentication Library ( Microsoft.Authentication.WebAssembly.Msal ). 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.Authentication.WebAssembly.Msal" 
  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.

Microsoft.Authentication.WebAssembly.MsalBalíček Microsoft.AspNetCore.Components.WebAssembly.Authentication do této aplikace přidá balíček.

Podpora ověřovací služby

Podpora ověřování uživatelů je registrovaná v kontejneru služby s AddMsalAuthentication metodou rozšíření poskytovanou Microsoft.Authentication.WebAssembly.Msal balíčkem. Tato metoda nastavuje služby, které aplikace potřebuje k interakci se Identity zprostředkovatelem (IP).

Program.cs:

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

AddMsalAuthenticationMetoda přijímá zpětné volání ke konfiguraci parametrů požadovaných k ověření aplikace. hodnoty požadované pro konfiguraci aplikace lze získat z konfigurace AAD při registraci aplikace.

Soubor zadal konfiguraci wwwroot/appsettings.json :

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

Příklad:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": true
  }
}

Obory přístupového tokenu

Tato Blazor WebAssembly Šablona automaticky nekonfiguruje aplikaci tak, aby požadovala přístupový token pro zabezpečené rozhraní API. Pokud chcete jako součást toku přihlášení zřídit přístupový token, přidejte obor do výchozích oborů přístupového tokenu MsalProviderOptions :

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

Určete další obory pomocí AdditionalScopesToConsent :

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

Další informace najdete v následujících částech článku o dalších scénářích :

Režim přihlášení

Rozhraní je ve výchozím nastavení automaticky otevíraná okna přihlášení a přejde zpět na přesměrování režimu přihlášení, pokud nelze otevřít automaticky otevírané okno. Nakonfigurujte MSAL pro použití režimu 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 popup a hodnota řetězce nerozlišuje velká a malá písmena.

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 page ( wwwroot/index.html ) obsahuje skript, který definuje AuthenticationService v jazyce JavaScript. AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provedení operací ověřování.

<script src="_content/Microsoft.Authentication.WebAssembly.Msal/
    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í RedirectToLogin součá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 App součást ( App.razor ) ve vygenerované aplikaci.

  • Zkontrolujte App součást ( App.razor ) v referenčním zdroji.

    Poznámka

    dokumentace odkazuje na zdrojový odkaz na ASP.NET Core načtení main vě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říklad release/5.0 vě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="BeginLogout">
            Log out
        </button>
    </Authorized>
    <NotAuthorized>
        <a href="authentication/login">Log in</a>
    </NotAuthorized>
</AuthorizeView>

@code {
    private async Task BeginLogout(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:

@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:

    • 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:

    1. V Azure Portal přístup k manifestu aplikace.
    2. Nastavte allowPublicClient atribut na null nebo true .

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
    • 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říklad https://localhost:5001 ).
      • Mozilla Firefox: Použijte -private -url {URL} , kde zástupný symbol je adresa URL, která se má otevřít {URL} (například https://localhost:5001 ).
    • 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ů:

  1. Vymažte mezipaměť balíčků NuGet systému spuštěním příkazu dotnet nuget locals all --clear z příkazového prostředí.
  2. Odstraňte složky a bin obj projektu.
  3. Obnovte a znovu sestavte projekt.
  4. 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í

tento článek popisuje, jak vytvořit samostatnou Blazor WebAssembly aplikaci , která pro ověřování používá Azure Active Directory (AAD) .

Poznámka

pro Blazor WebAssembly aplikace vytvořené v Visual Studio, které jsou nakonfigurované pro podporu účtů v AAD organizačním adresáři s Identity platformou Microsoft, použijte Visual Studio verze 16,10 nebo novější, aby se vytvořila aplikace se správnou konfigurací Azure. pokud používáte verzi Visual Studio starší než 16,10, je po vytvoření aplikace nutné ručně aktualizovat konfiguraci aplikace podle každé části tohoto článku .

registrace aplikace AAD:

  1. v Azure Portal přejděte na Azure Active Directory . Na bočním panelu vyberte Registrace aplikací . Klikněte na tlačítko Nová registrace .
  2. Zadejte název aplikace (například Blazor samostatné AAD).
  3. Vyberte podporované typy účtů. Účty v tomto organizačním adresáři můžete vybrat jenom pro toto prostředí.
  4. Rozevírací seznam identifikátor URI pro přesměrování nastavte na JEDNOSTRÁNKOVOU aplikaci (Spa) a zadejte následující identifikátor URI pro přesměrování: https://localhost:{PORT}/authentication/login-callback . Výchozí port pro aplikaci běžící v systému Kestrel je 5001. Pokud je aplikace spuštěná na jiném Kestrel portu, použijte port aplikace. pro IIS Express se náhodně generovaný port pro aplikaci dá najít ve vlastnostech aplikace na panelu ladění . vzhledem k tomu, že aplikace v tomto okamžiku neexistuje a port IIS Express není znám, vraťte se k tomuto kroku po vytvoření aplikace a aktualizaci identifikátoru URI přesměrování. po přeznačení se objeví dál v tomto tématu, které připomínat IIS Express uživatelům aktualizovat identifikátor URI přesměrování.
  5. Pokud používáte neověřenou doménu vydavatele, zrušte zaškrtnutí políčka oprávnění > udělit souhlas správce oprávnění OpenID a offline_access . Pokud je ověřena doména vydavatele, toto zaškrtávací políčko není k dispozici.
  6. Vyberte Zaregistrovat.

Zaznamenejte následující informace:

  • ID aplikace (klienta) (například 41451fa7-82d9-4673-8fa5-69eff5a761fd )
  • ID adresáře (tenanta) (například e86c78e2-8bb4-4c41-aefd-918e0565a45e )

V části Konfigurace > platformy ověřování jedno > stránková aplikace (SPA):

  1. Ověřte, že je k dispozici identifikátor URI pro https://localhost:{PORT}/authentication/login-callback přesměrování.
  2. V případě implicitního udělení se ujistěte, že nejsou zaškrtnuté políčko Přístupové tokeny a Tokeny ID.
  3. Zbývající výchozí hodnoty pro aplikaci jsou pro toto prostředí přijatelné.
  4. Vyberte tlačítko Uložit.

Vytvořte aplikaci v prázdné složce. Zástupné symboly v následujícím příkazu nahraďte dříve zaznamenaými informacemi a spusťte příkaz v příkazovém prostředí:

dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" -o {APP NAME} --tenant-id "{TENANT ID}"
Zástupný symbol Azure Portal názvu Příklad
{APP NAME} BlazorSample
{CLIENT ID} ID aplikace (klienta) 41451fa7-82d9-4673-8fa5-69eff5a761fd
{TENANT ID} ID adresáře (tenanta) e86c78e2-8bb4-4c41-aefd-918e0565a45e

Výstupní umístění zadané pomocí možnosti vytvoří složku projektu, pokud neexistuje, a stane se součástí -o|--output názvu aplikace.

Poznámka

V Azure Portal je identifikátor URI přesměrování konfigurace platformy aplikace nakonfigurovaný pro port 5001 pro aplikace, které běží na serveru s Kestrel výchozím nastavením.

Pokud se aplikace spustí na náhodném IIS Express portu, najdete port pro aplikaci ve vlastnostech aplikace na panelu Ladění.

Pokud port nebyl dříve nakonfigurovaný se známým portem aplikace, vraťte se k registraci aplikace v Azure Portal a aktualizujte identifikátor URI přesměrování se správným portem.

Přidejte MsalProviderOptions pro oprávnění pomocí User.Read DefaultAccessTokenScopes :

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
});

Po vytvoření aplikace byste měli být schopni:

Ověřovací balíček

Když je aplikace vytvořená pro použití pracovních nebo školních účtů ( ), aplikace automaticky obdrží odkaz na balíček pro SingleOrg 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 přidáváte ověřování do aplikace, ručně přidejte balíček do souboru projektu aplikace:

<PackageReference Include="Microsoft.Authentication.WebAssembly.Msal" 
  Version="{VERSION}" />

Pro zástupný symbol najdete nejnovější stabilní verzi balíčku, která odpovídá verzi sdílené architektury aplikace, v historii verzí balíčku na {VERSION} NuGet.org.

Balíček Microsoft.Authentication.WebAssembly.Msal tranzitivně přidá Microsoft.AspNetCore.Components.WebAssembly.Authentication balíček 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é Microsoft.Authentication.WebAssembly.Msal balíčkem. Tato metoda nastaví služby potřebné pro interakci aplikace s Identity poskytovatelem (IP).

Program.cs:

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

Metoda AddMsalAuthentication přijímá zpětné volání a konfiguruje parametry potřebné k ověření aplikace. Hodnoty vyžadované pro konfiguraci aplikace můžete získat z AAD konfigurace při registraci aplikace.

Konfigurace je dodána wwwroot/appsettings.json souborem:

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

Příklad:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": true
  }
}

Rozsahy přístupových tokenů

Šablona Blazor WebAssembly automaticky nenakonfiguruje aplikaci tak, aby si vyžádal 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 oborů výchozího přístupového tokenu MsalProviderOptions :

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

Pomocí zadejte další AdditionalScopesToConsent obory:

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

Další informace najdete v následujících částech článku Další scénáře:

Režim přihlášení

Rozhraní je ve výchozím nastavení automaticky otevíraná okna přihlášení a přejde zpět na přesměrování režimu přihlášení, pokud nelze otevřít automaticky otevírané okno. Nakonfigurujte MSAL pro použití režimu 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 popup a hodnota řetězce nerozlišuje velká a malá písmena.

Soubor importů

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 page ( wwwroot/index.html ) obsahuje skript, který definuje AuthenticationService v jazyce JavaScript. AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provedení operací ověřování.

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

Komponenta 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í RedirectToLogin součá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 App součást ( App.razor ) ve vygenerované aplikaci.

  • Zkontrolujte App součást ( App.razor ) v referenčním zdroji.

    Poznámka

    dokumentace odkazuje na zdrojový odkaz na ASP.NET Core načtení main vě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říklad release/5.0 vě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="BeginLogout">
            Log out
        </button>
    </Authorized>
    <NotAuthorized>
        <a href="authentication/login">Log in</a>
    </NotAuthorized>
</AuthorizeView>

@code {
    private async Task BeginLogout(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:

@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:

    • 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:

    1. V Azure Portal přístup k manifestu aplikace.
    2. Nastavte allowPublicClient atribut na null nebo true .

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
    • 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říklad https://localhost:5001 ).
      • Mozilla Firefox: Použijte -private -url {URL} , kde zástupný symbol je adresa URL, která se má otevřít {URL} (například https://localhost:5001 ).
    • 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ů:

  1. Vymažte mezipaměť balíčků NuGet systému spuštěním příkazu dotnet nuget locals all --clear z příkazového prostředí.
  2. Odstraňte složky a bin obj projektu.
  3. Obnovte a znovu sestavte projekt.
  4. 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í

Tento článek popisuje, jak vytvořit samostatnou Blazor WebAssembly aplikaci, která používá Azure Active Directory (AAD) pro ověřování.

Registrace AAD aplikace:

  1. V Azure Active Directory přejděte na Azure Portal. Vyberte Registrace aplikací na bočním panelu. Vyberte tlačítko Nová registrace.
  2. Zadejte Název aplikace (například Blazor Standalone AAD).
  3. Zvolte podporované typy účtů. Účty v tomto organizačním adresáři můžete vybrat jenom pro toto prostředí.
  4. Ponechte rozevírací seznam Identifikátor URI pro přesměrování nastavený na Web a zadejte následující identifikátor URI přesměrování: https://localhost:{PORT}/authentication/login-callback . Výchozí port pro aplikaci běžící na Kestrel je 5001. Pokud je aplikace spuštěná na jiném Kestrel portu, použijte port aplikace. Například IIS Express náhodně generovaný port pro aplikaci najdete ve vlastnostech aplikace na panelu Ladění. Vzhledem k tomu, že aplikace v tuto chvíli neexistuje a port IIS Express není známý, vraťte se k tomuto kroku po vytvoření aplikace a aktualizujte identifikátor URI přesměrování. Dále v tomto tématu se objeví poznámka, která uživatelům IIS Express, aby identifikátor URI přesměrování aktualizovat.
  5. Pokud používáte neověřenou doménu vydavatele,zrušte zaškrtnutí políčka Permissions > Grant admin consent to openid and offline_access permissions (Udělit souhlas správce s openid a offline_access oprávnění). Pokud je doména vydavatele ověřená, toto zaškrtávací políčko není k dispozici.
  6. Vyberte Zaregistrovat.

Zaznamente si následující informace:

  • ID aplikace (klienta) (například 41451fa7-82d9-4673-8fa5-69eff5a761fd )
  • ID adresáře (tenanta) (například e86c78e2-8bb4-4c41-aefd-918e0565a45e )

V části Konfigurace > platformy ověřování > Web:

  1. Ověřte, že je k dispozici identifikátor URI pro https://localhost:{PORT}/authentication/login-callback přesměrování.
  2. U implicitního udělení zaškrtněte políčka Přístupové tokeny a Tokeny ID.
  3. Zbývající výchozí hodnoty pro aplikaci jsou pro toto prostředí přijatelné.
  4. Vyberte tlačítko Uložit.

Vytvořte aplikaci v prázdné složce. Zástupné symboly v následujícím příkazu nahraďte dříve zaznamenaými informacemi a spusťte příkaz v příkazovém prostředí:

dotnet new blazorwasm -au SingleOrg --client-id "{CLIENT ID}" -o {APP NAME} --tenant-id "{TENANT ID}"
Zástupný symbol Azure Portal názvu Příklad
{APP NAME} BlazorSample
{CLIENT ID} ID aplikace (klienta) 41451fa7-82d9-4673-8fa5-69eff5a761fd
{TENANT ID} ID adresáře (tenanta) e86c78e2-8bb4-4c41-aefd-918e0565a45e

Výstupní umístění zadané pomocí možnosti vytvoří složku projektu, pokud neexistuje, a stane se součástí -o|--output názvu aplikace.

Poznámka

V Azure Portal je identifikátor URI přesměrování konfigurace platformy aplikace nakonfigurovaný pro port 5001 pro aplikace, které běží na serveru s Kestrel výchozím nastavením.

Pokud se aplikace spustí na náhodném IIS Express portu, najdete port pro aplikaci ve vlastnostech aplikace na panelu Ladění.

Pokud port nebyl dříve nakonfigurovaný se známým portem aplikace, vraťte se k registraci aplikace v Azure Portal a aktualizujte identifikátor URI přesměrování se správným portem.

Po vytvoření aplikace byste měli být schopni:

Ověřovací balíček

Když je aplikace vytvořená pro použití pracovních nebo školních účtů ( ), aplikace automaticky obdrží odkaz na balíček pro SingleOrg 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 přidáváte ověřování do aplikace, ručně přidejte balíček do souboru projektu aplikace:

<PackageReference Include="Microsoft.Authentication.WebAssembly.Msal" 
  Version="{VERSION}" />

Pro zástupný symbol najdete nejnovější stabilní verzi balíčku, která odpovídá verzi sdílené architektury aplikace, v historii verzí balíčku na {VERSION} NuGet.org.

Balíček Microsoft.Authentication.WebAssembly.Msal tranzitivně přidá Microsoft.AspNetCore.Components.WebAssembly.Authentication balíček 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é Microsoft.Authentication.WebAssembly.Msal balíčkem. Tato metoda nastaví služby potřebné pro interakci aplikace s Identity poskytovatelem (IP).

Program.cs:

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

Metoda AddMsalAuthentication přijímá zpětné volání a konfiguruje parametry potřebné k ověření aplikace. Hodnoty vyžadované pro konfiguraci aplikace můžete získat z AAD konfigurace při registraci aplikace.

Konfigurace je dodána wwwroot/appsettings.json souborem:

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

Příklad:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": true
  }
}

Rozsahy přístupových tokenů

Šablona Blazor WebAssembly automaticky nenakonfiguruje aplikaci tak, aby si vyžádal 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 oborů výchozího přístupového tokenu MsalProviderOptions :

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

Pomocí zadejte další AdditionalScopesToConsent obory:

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

Při práci s rozhraním API serveru zaregistrovanou v AAD a registrace AAD aplikace je v tenantovi, který závisí na neověřené doméně vydavatele,identifikátor URI ID aplikace serverového rozhraní API není, ale je ve api://{SERVER API APP CLIENT ID OR CUSTOM VALUE} formátu https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE} . V takovém případě se výchozí obor přístupového tokenu v aplikaci bude podobá Program.cs Client následujícímu:

options.ProviderOptions.DefaultAccessTokenScopes
    .Add("https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}/{DEFAULT SCOPE}");

Pokud chcete nakonfigurovat serverovou aplikaci API pro odpovídající cílovou skupinu, nastavte v souboru nastavení aplikace API ( ) tak, aby odpovídal cílové skupině aplikace poskytované Audience Server appsettings.json Azure Portal:

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/{TENANT ID}",
    "ClientId": "{SERVER API APP CLIENT ID}",
    "ValidateAuthority": true,
    "Audience": "https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}"
  }
}

V předchozí konfiguraci nezahrnuje konec Audience hodnoty výchozí obor /{DEFAULT SCOPE} .

Příklad:

V Program.cs Client aplikaci:

options.ProviderOptions.DefaultAccessTokenScopes
    .Add("https://contoso.onmicrosoft.com/41451fa7-82d9-4673-8fa5-69eff5a761fd/API.Access");

Nakonfigurujte Server soubor nastavení aplikace API ( ) s odpovídající appsettings.json cílovou skupinou ( Audience ):

{
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": true,
    "Audience": "https://contoso.onmicrosoft.com/41451fa7-82d9-4673-8fa5-69eff5a761fd"
  }
}

V předchozím příkladu neobsahuje konec Audience hodnoty výchozí obor /API.Access .

Další informace najdete v následujících částech článku Další scénáře:

Soubor importů

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 page ( wwwroot/index.html ) obsahuje skript, který definuje AuthenticationService v jazyce JavaScript. AuthenticationService zpracovává podrobnosti nízké úrovně protokolu OIDC. Aplikace interně volá metody definované ve skriptu k provedení operací ověřování.

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

Komponenta 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í RedirectToLogin součá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 App součást ( App.razor ) ve vygenerované aplikaci.

  • Zkontrolujte App součást ( App.razor ) v referenčním zdroji.

    Poznámka

    dokumentace odkazuje na zdrojový odkaz na ASP.NET Core načtení main vě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říklad release/5.0 vě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="BeginLogout">
            Log out
        </button>
    </Authorized>
    <NotAuthorized>
        <a href="authentication/login">Log in</a>
    </NotAuthorized>
</AuthorizeView>

@code {
    private async Task BeginLogout(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:

@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:

    • 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:

    1. V Azure Portal přístup k manifestu aplikace.
    2. Nastavte allowPublicClient atribut na null nebo true .

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
    • 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říklad https://localhost:5001 ).
      • Mozilla Firefox: Použijte -private -url {URL} , kde zástupný symbol je adresa URL, která se má otevřít {URL} (například https://localhost:5001 ).
    • 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ů:

  1. Vymažte mezipaměť balíčků NuGet systému spuštěním příkazu dotnet nuget locals all --clear z příkazového prostředí.
  2. Odstraňte složky a bin obj projektu.
  3. Obnovte a znovu sestavte projekt.
  4. 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í