Zabezpečení samostatné ASP.NET Core Blazor WebAssembly aplikace pomocí Azure Active Directory B2C

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

Podle pokynů v článku Vytvoření tenanta AAD B2C (dokumentace Azure) vytvořte tenanta nebo identifikujte existujícího tenanta B2C, který bude aplikace používat v Azure Portal. Ihned po vytvoření nebo identifikaci tenanta, který se má použít, se vraťte k tomuto článku.

Zaznamente si následující informace:

  • AAD Instance B2C (například , která zahrnuje koncové lomítko): Instance je schéma a hostitel registrace aplikace https://contoso.b2clogin.com/ Azure B2C, kterou najdete otevřením okna Koncové body ze stránky Registrace aplikací v okně Azure Portal.
  • AAD B2C Primary/Publisher/Tenant domain (například ): Doména je k dispozici jako doména Publisher v okně contoso.onmicrosoft.com Branding Azure Portal pro zaregistrovanou aplikaci.

Registrace AAD B2C:

  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 B2C).
  3. V části Podporované typy účtů vyberte možnost více tenantů: Účty v libovolném organizačním adresáři nebo poskytovateli identity. Pro ověřování uživatelů pomocí Azure AD B2C.
  4. V rozevíracím seznamu Identifikátor URI pro přesměrování nastavte Jedno stránkovanou aplikaci (SPA) 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,ověřte, že je vybraná možnost Oprávnění 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 ID aplikace (klienta) (například 41451fa7-82d9-4673-8fa5-69eff5a761fd ).

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.

V Home > Azure AD B2C > Toky uživatelů:

Vytvoření toku uživatelů pro přihlášení a přihlášení

Minimálně vyberte atribut uživatele Zobrazované jméno > deklarací identity aplikace a naplňte ho context.User.Identity.Name v LoginDisplay komponentě ( Shared/LoginDisplay.razor ).

Záznam názvu toku uživatele pro přihlášení a registrace vytvořeného pro aplikaci (například B2C_1_signupsignin ).

V prázdné složce nahraďte zástupné symboly v následujícím příkazu dříve zaznamenané informace a spusťte příkaz v příkazovém prostředí:

dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --client-id "{CLIENT ID}" --domain "{TENANT DOMAIN}" -o {APP NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
Zástupný symbol Azure Portal názvu Příklad
{AAD B2C INSTANCE} Instance https://contoso.b2clogin.com/ (zahrnuje koncové lomítko)
{APP NAME} BlazorSample
{CLIENT ID} ID aplikace (klienta) 41451fa7-82d9-4673-8fa5-69eff5a761fd
{SIGN UP OR SIGN IN POLICY} Tok uživatele registrace/přihlášení B2C_1_signupsignin1
{TENANT DOMAIN} Primární/Publisher/doména tenanta contoso.onmicrosoft.com

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 pár MsalProviderOptions pro openid a offline_access DefaultAccessTokenScopes :

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

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

Ověřovací balíček

Když se vytvoří aplikace pro použití individuálního účtu B2C ( ), aplikace automaticky obdrží odkaz na balíček pro IndividualB2C Knihovnu ověřování Microsoftu ( 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í všechny služby potřebné pro interakci aplikace s Identity poskytovatelem (IP).

Program.cs:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAdB2C", 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 je možné získat z AAD konfigurace při registraci aplikace.

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

{
  "AzureAdB2C": {
    "Authority": "{AAD B2C INSTANCE}{DOMAIN}/{SIGN UP OR SIGN IN POLICY}",
    "ClientId": "{CLIENT ID}",
    "ValidateAuthority": false
  }
}

V předchozí konfiguraci zahrnuje {AAD B2C INSTANCE} koncové lomítko.

Příklad:

{
  "AzureAdB2C": {
    "Authority": "https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin1",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": false
  }
}

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; }
}

Vlastní toky uživatelů

Microsoft Authentication Library ( , NuGet ) ve výchozím nastavení nepodporuje Microsoft.Authentication.WebAssembly.Msal AAD B2C toky uživatelů. Vytváření vlastních toků uživatelů v kódu pro vývojáře

Další informace o tom, jak vytvořit výzvu pro vlastní tok uživatele, najdete v tématu Toky uživatelů v Azure Active Directory B2C.

Ř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) B2C k ověřování.

Podle pokynů v článku Vytvoření tenanta AAD B2C (dokumentace Azure) vytvořte tenanta nebo identifikujte existujícího tenanta B2C, který bude aplikace používat v Azure Portal. Ihned po vytvoření nebo identifikaci tenanta, který se má použít, se vraťte k tomuto článku.

Zaznamente si následující informace:

  • AAD Instance B2C (například , která zahrnuje koncové lomítko): Instance je schéma a hostitel registrace aplikace https://contoso.b2clogin.com/ Azure B2C, kterou najdete otevřením okna Koncové body ze stránky Registrace aplikací v okně Azure Portal.
  • AAD B2C Primary/Publisher/Tenant domain (například ): Doména je k dispozici jako doména Publisher v okně contoso.onmicrosoft.com Branding Azure Portal pro zaregistrovanou aplikaci.

Registrace AAD B2C:

  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 B2C).
  3. V části Podporované typy účtů vyberte možnost více tenantů: Účty v libovolném organizačním adresáři nebo poskytovateli identity. Pro ověřování uživatelů pomocí Azure AD B2C.
  4. V rozevíracím seznamu Identifikátor URI pro přesměrování nastavte Jedno stránkovanou aplikaci (SPA) 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,ověřte, že je vybraná možnost Oprávnění Udělit souhlas správce s > openid 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 ID aplikace (klienta) (například 41451fa7-82d9-4673-8fa5-69eff5a761fd ).

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.

V Home > Azure AD B2C > Toky uživatelů:

Vytvoření toku uživatelů pro přihlášení a přihlášení

Minimálně vyberte atribut uživatele Zobrazované jméno > deklarací identity aplikace a naplňte ho context.User.Identity.Name v LoginDisplay komponentě ( Shared/LoginDisplay.razor ).

Záznam názvu toku uživatele pro přihlášení a registrace vytvořeného pro aplikaci (například B2C_1_signupsignin ).

V prázdné složce nahraďte zástupné symboly v následujícím příkazu dříve zaznamenané informace a spusťte příkaz v příkazovém prostředí:

dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --client-id "{CLIENT ID}" --domain "{TENANT DOMAIN}" -o {APP NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
Zástupný symbol Azure Portal názvu Příklad
{AAD B2C INSTANCE} Instance https://contoso.b2clogin.com/
{APP NAME} BlazorSample
{CLIENT ID} ID aplikace (klienta) 41451fa7-82d9-4673-8fa5-69eff5a761fd
{SIGN UP OR SIGN IN POLICY} Tok uživatele registrace/přihlášení B2C_1_signupsignin1
{TENANT DOMAIN} Primární/Publisher/doména tenanta contoso.onmicrosoft.com

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 pár MsalProviderOptions pro openid a offline_access DefaultAccessTokenScopes :

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

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

Ověřovací balíček

Když se vytvoří aplikace pro použití individuálního účtu B2C ( ), aplikace automaticky obdrží odkaz na balíček pro IndividualB2C Knihovnu ověřování Microsoftu ( 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í všechny služby potřebné pro interakci aplikace s Identity poskytovatelem (IP).

Program.cs:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAdB2C", 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:

{
  "AzureAdB2C": {
    "Authority": "{AAD B2C INSTANCE}{DOMAIN}/{SIGN UP OR SIGN IN POLICY}",
    "ClientId": "{CLIENT ID}",
    "ValidateAuthority": false
  }
}

Příklad:

{
  "AzureAdB2C": {
    "Authority": "https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin1",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": false
  }
}

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; }
}

Vlastní toky uživatelů

Microsoft Authentication Library ( , NuGet ) ve výchozím nastavení nepodporuje Microsoft.Authentication.WebAssembly.Msal AAD B2C toky uživatelů. Vytváření vlastních toků uživatelů v kódu pro vývojáře

Další informace o tom, jak vytvořit výzvu pro vlastní tok uživatele, najdete v tématu Toky uživatelů v Azure Active Directory B2C.

Ř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) B2C pro ověřování.

Podle pokynů v článku Vytvoření tenanta AAD B2C (dokumentace Azure) vytvořte tenanta nebo identifikujte existujícího tenanta B2C, který má aplikace používat v Azure Portal. Ihned po vytvoření nebo identifikaci tenanta, který se má použít, se vraťte k tomuto článku.

Zaznamente si následující informace:

  • AAD Instance B2C (například , která zahrnuje koncové lomítko): Instance je schéma a hostitel registrace aplikace https://contoso.b2clogin.com/ Azure B2C, kterou najdete otevřením okna Koncové body ze stránky Registrace aplikací v okně Azure Portal.
  • AAD B2C Primární/Publisher/Doména tenanta (například ): Doména je k dispozici jako doména Publisher v okně contoso.onmicrosoft.com Branding Azure Portal pro zaregistrovanou aplikaci.

Registrace AAD B2C:

  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 B2C).
  3. V části Podporované typy účtů vyberte možnost více tenantů: Účty v libovolném organizačním adresáři nebo poskytovateli identity. Pro ověřování uživatelů pomocí Azure AD B2C.
  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,ověřte, že je vybraná možnost Oprávnění Udělit souhlas správce s > openid 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 ID aplikace (klienta) (například 41451fa7-82d9-4673-8fa5-69eff5a761fd ).

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.

V Home > Azure AD B2C > Toky uživatelů:

Vytvoření toku uživatelů pro přihlášení a přihlášení

Minimálně vyberte atribut uživatele Zobrazované jméno > deklarací identity aplikace a naplňte ho context.User.Identity.Name v LoginDisplay komponentě ( Shared/LoginDisplay.razor ).

Záznam názvu toku uživatele pro přihlášení a registrace vytvořeného pro aplikaci (například B2C_1_signupsignin ).

V prázdné složce nahraďte zástupné symboly v následujícím příkazu dříve zaznamenané informace a spusťte příkaz v příkazovém prostředí:

dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --client-id "{CLIENT ID}" --domain "{TENANT DOMAIN}" -o {APP NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
Zástupný symbol Azure Portal názvu Příklad
{AAD B2C INSTANCE} Instance https://contoso.b2clogin.com/
{APP NAME} BlazorSample
{CLIENT ID} ID aplikace (klienta) 41451fa7-82d9-4673-8fa5-69eff5a761fd
{SIGN UP OR SIGN IN POLICY} Tok uživatele registrace/přihlášení B2C_1_signupsignin1
{TENANT DOMAIN} Primární/Publisher/doména tenanta contoso.onmicrosoft.com

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 pro aplikace, které běží na serveru s výchozím nastavením, nakonfigurovaný identifikátor URI přesměrování konfigurace platformy aplikace pro port 5001. Kestrel

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ž se vytvoří aplikace pro použití individuálního účtu B2C ( ), aplikace automaticky obdrží odkaz na balíček pro IndividualB2C 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í všechny služby potřebné pro interakci aplikace s Identity poskytovatelem (IP).

Program.cs:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAdB2C", 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:

{
  "AzureAdB2C": {
    "Authority": "{AAD B2C INSTANCE}{DOMAIN}/{SIGN UP OR SIGN IN POLICY}",
    "ClientId": "{CLIENT ID}",
    "ValidateAuthority": false
  }
}

Příklad:

{
  "AzureAdB2C": {
    "Authority": "https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin1",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": false
  }
}

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:

Soubor importu

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; }
}

Vlastní toky uživatelů

Microsoft Authentication Library ( , NuGet ) ve výchozím nastavení nepodporuje Microsoft.Authentication.WebAssembly.Msal AAD B2C toky uživatelů. Vytváření vlastních toků uživatelů v kódu pro vývojáře

Další informace o tom, jak vytvořit výzvu pro vlastní tok uživatele, najdete v tématu Toky uživatelů v Azure Active Directory B2C.

Ř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í