Delen via


Een ASP.NET Core-Blazor Web App beveiligen met Microsoft Entra-id

In dit artikel wordt beschreven hoe u een Blazor Web App beveiligt met Microsoft Identity Platform/Microsoft Identity-webpakketten voor Microsoft Entra ID met behulp van een voorbeeld-app.

De volgende specificatie wordt behandeld:

  • De Blazor Web App gebruikt de modus Automatisch renderen met globale interactiviteit (InteractiveAuto).
  • Het serverproject roept AddAuthenticationStateSerialization aan om een verificatiestatusprovider aan de serverzijde toe te voegen die gebruikmaakt van PersistentComponentState om de verificatiestatus naar de client te laten stromen. De client roept AddAuthenticationStateDeserialization aan om te deserialiseren en de verificatiestatus te gebruiken die door de server wordt doorgegeven. De verificatiestatus is vast voor de levensduur van de WebAssembly-toepassing.
  • De app maakt gebruik van Microsoft Entra ID, op basis van Microsoft Identity Web-pakketten.
  • Automatische niet-interactieve tokenvernieuwing wordt beheerd door het framework.
  • De app maakt gebruik van serviceabstracties aan de serverzijde en aan de clientzijde om gegenereerde weersgegevens weer te geven:
    • Wanneer de Weather-component op de server wordt weergegeven om weersgegevens te tonen, gebruikt de component de ServerWeatherForecaster op de server om rechtstreeks weersgegevens te verkrijgen (niet via een web-API-aanroep).
    • Wanneer het Weather-onderdeel wordt weergegeven op de client, gebruikt het de ClientWeatherForecaster-service, die een vooraf geconfigureerde HttpClient (in het Program-bestand van het clientproject) benut om een web-API-aanroep te doen naar de minimale API (/weather-forecast) van het serverproject voor weergegevens. Het minimale API-eindpunt haalt de weergegevens op uit de ServerWeatherForecaster-klasse en retourneert het naar de client voor rendering door het onderdeel.

Voorbeeld-app

De voorbeeld-app bestaat uit twee projecten:

  • BlazorWebAppEntra: project aan de serverzijde van de Blazor Web App, met een voorbeeld minimale API- eindpunt voor weergegevens.
  • BlazorWebAppEntra.Client: Project aan de clientzijde van de Blazor Web App.

Open voorbeeldapplicaties via de meest recente versie map vanuit de hoofdmap van de repository met de volgende koppeling. De projecten bevinden zich in de map BlazorWebAppEntra voor .NET 9 of hoger.

Voorbeeldcode bekijken of downloaden (hoe download je)

Blazor Web App project aan de serverzijde (BlazorWebAppEntra)

Het BlazorWebAppEntra project is het project aan de serverzijde van de Blazor Web App.

Het BlazorWebAppEntra.http-bestand kan worden gebruikt voor het testen van de aanvraag voor weergegevens. Houd er rekening mee dat het BlazorWebAppEntra project moet worden uitgevoerd om het eindpunt te testen en dat het eindpunt in het bestand is vastgelegd. Zie HTTP-bestanden gebruiken in Visual Studio 2022voor meer informatie.

Blazor Web App project aan de klantzijde (BlazorWebAppEntra.Client)

Het BlazorWebAppEntra.Client-project is het client-side project van Blazor Web App.

Als de gebruiker zich moet aanmelden of afmelden tijdens rendering aan de clientzijde, wordt een volledige pagina opnieuw geladen.

Configuratie

In deze sectie wordt uitgelegd hoe u de voorbeeld-app configureert.

AddMicrosoftIdentityWebApp van Microsoft Identity Web (Microsoft.Identity.Web NuGet-pakket, API-documentatie) is geconfigureerd door de sectie AzureAd van het appsettings.json-bestand van het serverproject.

Gebruik in de registratie van de app in Entra of Azure Portal een Web-platformconfiguratie met een Omleidings-URI- van https://localhost/signin-oidc (een poort is niet vereist). Controleer of id-tokens en toegangstokens onder Impliciete toekenning en hybride stromenniet geselecteerd. De OpenID Connect-handler vraagt automatisch de juiste tokens aan met behulp van de code die wordt geretourneerd vanuit het autorisatie-eindpunt.

De app configureren

Voer in het app-instellingenbestand van het serverproject (appsettings.json) de configuratie van de AzureAd-sectie van de app in. Haal de applicatie-id (client-id), tenant (uitgever) domein en directory-id (tenant) op uit de registratie van de app in de Entra- of Azure-portal:

"AzureAd": {
  "CallbackPath": "/signin-oidc",
  "ClientId": "{CLIENT ID}",
  "Domain": "{DOMAIN}",
  "Instance": "https://login.microsoftonline.com/",
  "ResponseType": "code",
  "TenantId": "{TENANT ID}"
},

Plaatsaanduidingen in het voorgaande voorbeeld:

  • {CLIENT ID}: de toepassings-id (client).
  • {DOMAIN}: het domein van de huurder (ook wel uitgever genoemd).
  • {TENANT ID}: De directory (tenant) ID.

Voorbeeld:

"AzureAd": {
  "CallbackPath": "/signin-oidc",
  "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "Domain": "contoso.onmicrosoft.com",
  "Instance": "https://login.microsoftonline.com/",
  "ResponseType": "code",
  "TenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
},

Het callback-pad (CallbackPath) moet overeenkomen met de omleidings-URI (callbackpad voor aanmelding) die is geconfigureerd bij het registreren van de toepassing in de Entra- of Azure-portal. Paden worden geconfigureerd op de pagina Verificatie van de app-registratie. De standaardwaarde van CallbackPath is /signin-oidc voor een geregistreerde omleidings-URI van https://localhost/signin-oidc (een poort is niet vereist).

De SignedOutCallbackPath (configuratiesleutel: 'SignedOutCallbackPath') is het aanvraagpad binnen het basispad van de app dat wordt onderschept door de OpenID Connect-handler waar de gebruikersagent voor het eerst wordt geretourneerd na afmelding bij Entra. De voorbeeld-app stelt geen waarde in voor het pad omdat de standaardwaarde van '/signout-callback-oidc' wordt gebruikt. Nadat de aanvraag is onderschept, verwijst de OpenID Connect-handler naar SignedOutRedirectUri of RedirectUri, indien specifiek.

Configureer het pad voor uitgelogde callback in de Entra-registratie van de app. Stel in de Entra- of Azure-portal het pad in in de web- platformconfiguratie van de omleidings-URI vermeldingen:

https://localhost/signout-callback-oidc

Notitie

Een poort is niet vereist voor localhost adressen bij het gebruik van Entra.

Als u de afmeldingspad-URI niet toevoegt aan de registratie van de app in Entra, weigert Entra de gebruiker terug te leiden naar de app en vraagt hij of zij alleen hun browservenster te sluiten.

Notitie

Entra leidt een primaire beheerder (hoofdaccount) of externe gebruiker niet terug naar de Blazor-toepassing. In plaats daarvan registreert Entra de gebruiker uit de app en raadt ze aan om al hun browservensters te sluiten. Voor meer informatie, zie postLogoutRedirectUri werkt niet wanneer de authoriteits-URL een tenant-id (AzureAD/microsoft-authentication-library-for-js #5783) bevat.

Waarschuwing

Sla geen app-geheimen, verbindingsreeksen, referenties, wachtwoorden, persoonlijke identificatienummers (PINCODE's), persoonlijke C#/.NET-code of persoonlijke sleutels/tokens op in code aan de clientzijde. Dit is altijd onveilig. In testomgevingen en stagingomgevingen en productieomgevingen moeten aan de serverkant Blazor-code en web-API's beveiligde verificatiestromen gebruiken die voorkomen dat inloggegevens in projectcode of configuratiebestanden worden opgeslagen. Buiten het testen van lokale ontwikkeling raden we u aan het gebruik van omgevingsvariabelen voor het opslaan van gevoelige gegevens te vermijden, omdat omgevingsvariabelen niet de veiligste benadering zijn. Voor het testen van lokale ontwikkeling wordt het hulpprogramma Secret Manager aanbevolen voor het beveiligen van gevoelige gegevens. Zie Gevoelige gegevens en referenties veilig onderhoudenvoor meer informatie.

Het clientgeheim tot stand brengen

Maak een clientgeheim in de entra-id-registratie van de app in de Entra- of Azure-portal (Manage>Certificates & secrets>New client secret). Gebruik de waarde van de nieuwe sleutel in de volgende instructies.

Gebruik een of beide van de volgende methoden om het clientgeheim aan de app te leveren:

  • Secret Manager-hulpprogramma: het secret manager-hulpprogramma slaat persoonlijke gegevens op de lokale computer op en wordt alleen gebruikt tijdens de lokale ontwikkeling.
  • Azure Key Vault-: u kunt het clientgeheim opslaan in een sleutelkluis voor gebruik in elke omgeving, inclusief voor de ontwikkelomgeving wanneer u lokaal werkt. Sommige ontwikkelaars gebruiken liever sleutelkluizen voor faserings- en productie-implementaties en gebruiken het hulpprogramma Secret Manager voor lokale ontwikkeling.

U wordt ten zeerste aangeraden geen clientgeheimen op te slaan in projectcode- of configuratiebestanden. Gebruik beveiligde verificatiestromen, zoals een of beide benaderingen in deze sectie.

Hulpprogramma Secret Manager

Het hulpprogramma Secret Manager kan het clientgeheim van de server-app opslaan onder de configuratiesleutel AzureAd:ClientSecret.

De voorbeeld-app is niet geïnitialiseerd voor het hulpprogramma Secret Manager. Gebruik een opdrachtshell, zoals de PowerShell-opdrachtshell voor ontwikkelaars in Visual Studio, om de volgende opdracht uit te voeren. Voordat u de opdracht uitvoert, wijzigt u de map met de opdracht cd in de map van het serverproject. Met de opdracht wordt een gebruikersgeheim-id (<UserSecretsId>) in het projectbestand van de server-app vastgelegd, dat intern wordt gebruikt door de tooling om geheimen voor de app bij te houden:

dotnet user-secrets init

Voer de volgende opdracht uit om het clientgeheim in te stellen. De tijdelijke aanduiding {SECRET} is het clientgeheim dat is verkregen uit de Entra-registratie van de app:

dotnet user-secrets set "AzureAd:ClientSecret" "{SECRET}"

Als u Visual Studio gebruikt, kunt u bevestigen dat het geheim is ingesteld door met de rechtermuisknop op het serverproject te klikken in Solution Explorer en Gebruikersgeheimen beheren te selecteren.

Azure Key Vault

Azure Key Vault- biedt een veilige benadering voor het leveren van het clientgeheim van de app aan de app.

Als u een sleutelkluis wilt maken en een clientgeheim wilt instellen, raadpleegt u Over Azure Key Vault-geheimen (Azure-documentatie), die resources kruislings koppelt om aan de slag te gaan met Azure Key Vault. Als u de code in deze sectie wilt implementeren, registreert u de sleutelkluis-URI en de geheime naam van Azure wanneer u de sleutelkluis en het geheim maakt. Wanneer u het toegangsbeleid voor het geheim instelt in het Toegangsbeleid deelvenster:

  • Alleen de machtiging geheim is vereist.
  • Selecteer de toepassing als de Principal- voor het geheim.

Belangrijk

Er wordt een sleutelkluisgeheim gemaakt met een vervaldatum. Zorg ervoor dat u bijhoudt wanneer een sleutelkluisgeheim verloopt en maak een nieuw geheim voor de app voordat die datum is verstreken.

Voeg de volgende AzureHelper klasse toe aan het serverproject. De methode GetKeyVaultSecret haalt een geheim op uit een sleutelkluis. Pas de naamruimte (BlazorSample.Helpers) aan zodat deze overeenkomt met het projectnaamruimteschema.

Helpers/AzureHelper.cs:

using Azure;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

namespace BlazorSample.Helpers;

public static class AzureHelper
{
    public static string GetKeyVaultSecret(string tenantId, string vaultUri, string secretName)
    {
        DefaultAzureCredentialOptions options = new()
        {
            // Specify the tenant ID to use the dev credentials when running the app locally
            // in Visual Studio.
            VisualStudioTenantId = tenantId,
            SharedTokenCacheTenantId = tenantId
        };

        var client = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential(options));
        var secret = client.GetSecretAsync(secretName).Result;

        return secret.Value.Value;
    }
}

Wanneer services zijn geregistreerd in het Program-bestand van het serverproject, moet u het clientgeheim ophalen en toepassen met behulp van de volgende code:

var tenantId = builder.Configuration.GetValue<string>("AzureAd:TenantId")!;
var vaultUri = builder.Configuration.GetValue<string>("AzureAd:VaultUri")!;
var secretName = builder.Configuration.GetValue<string>("AzureAd:SecretName")!;

builder.Services.Configure<MicrosoftIdentityOptions>(
    OpenIdConnectDefaults.AuthenticationScheme,
    options =>
    {
        options.ClientSecret = 
            AzureHelper.GetKeyVaultSecret(tenantId, vaultUri, secretName);
    });

Als u de omgeving wilt beheren waarin de voorgaande code werkt, bijvoorbeeld om te voorkomen dat de code lokaal wordt uitgevoerd omdat u ervoor hebt gekozen om het hulpprogramma Secret Manager te gebruiken voor lokale ontwikkeling, kunt u de voorgaande code verpakken in een voorwaardelijke instructie waarmee de omgeving wordt gecontroleerd:

if (!context.HostingEnvironment.IsDevelopment())
{
    ...
}

Voeg in het gedeelte AzureAd van appsettings.jsonde volgende VaultUri en SecretName configuratiesleutels en -waarden toe:

"VaultUri": "{VAULT URI}",
"SecretName": "{SECRET NAME}"

In het voorgaande voorbeeld:

  • De tijdelijke aanduiding {VAULT URI} is de sleutelkluis-URI. Neem de afsluitende slash op de URI op.
  • De tijdelijke aanduiding {SECRET NAME} is de geheime naam.

Voorbeeld:

"VaultUri": "https://contoso.vault.azure.net/",
"SecretName": "BlazorWebAppEntra"

Configuratie wordt gebruikt om het leveren van toegewezen sleutelkluizen en geheime namen te vergemakkelijken op basis van de omgevingsconfiguratiebestanden van de app. U kunt bijvoorbeeld verschillende configuratiewaarden opgeven voor appsettings.Development.json in ontwikkeling, appsettings.Staging.json bij fasering en appsettings.Production.json voor de productie-implementatie. Zie ASP.NET Core Blazor-configuratievoor meer informatie.

Omleiden naar de startpagina bij afmelding

Met het LogInOrOut-onderdeel (Layout/LogInOrOut.razor) wordt een verborgen veld ingesteld voor de retour-URL (ReturnUrl) op de huidige URL (currentURL). Wanneer de gebruiker zich afmeldt bij de app, retourneert de id-provider de gebruiker naar de pagina van waaruit ze zijn afgemeld. Als de gebruiker zich afmeldt vanaf een beveiligde pagina, wordt deze teruggezet naar dezelfde beveiligde pagina en teruggestuurd via het verificatieproces. Deze verificatiestroom is redelijk wanneer gebruikers regelmatig accounts moeten wijzigen.

U kunt ook het volgende LogInOrOut-onderdeel gebruiken, dat geen retour-URL levert wanneer u zich afmeldt.

Layout/LogInOrOut.razor:

<div class="nav-item px-3">
    <AuthorizeView>
        <Authorized>
            <form action="authentication/logout" method="post">
                <AntiforgeryToken />
                <button type="submit" class="nav-link">
                    <span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true">
                    </span> Logout @context.User.Identity?.Name
                </button>
            </form>
        </Authorized>
        <NotAuthorized>
            <a class="nav-link" href="authentication/login">
                <span class="bi bi-person-badge-nav-menu" aria-hidden="true"></span> 
                Login
            </a>
        </NotAuthorized>
    </AuthorizeView>
</div>

Problemen oplossen

Loggen

De server-app is een standaard-ASP.NET Core-app. Zie de richtlijnen voor ASP.NET Core-logboekregistratie om een lager niveau voor logboekregistratie in te schakelen in de server-app.

Als u foutopsporing of traceringslogboekregistratie wilt inschakelen voor Blazor WebAssembly-verificatie, raadpleegt u de sectie logboekregistratie aan de clientzijde van ASP.NET Core Blazor logboekregistratie met de artikelversiekiezer ingesteld op ASP.NET Core 7.0 of hoger.

Veelvoorkomende fouten

  • Verkeerde configuratie van de app of Identity internetprovider (IP)

    De meest voorkomende fouten worden veroorzaakt door onjuiste configuratie. Hier volgen enkele voorbeelden:

    • Afhankelijk van de vereisten van het scenario voorkomt een ontbrekende of onjuiste autoriteit, instantie, tenant-id, tenantdomein, client-id of omleidings-URI dat een app clients kan authenticeren.
    • Onjuiste aanvraagbereiken voorkomen dat clients toegang hebben tot eindpunten van de serverweb-API.
    • Onjuiste of ontbrekende server-API-machtigingen voorkomen dat clients toegang hebben tot web-API-eindpunten van de server.
    • Het uitvoeren van de app op een andere poort dan is geconfigureerd in de omleidings-URI van de IP's app-registratie. Houd er rekening mee dat een poort niet vereist is voor Microsoft Entra ID en een app die wordt uitgevoerd op een localhost ontwikkelingstestadres, maar de poortconfiguratie van de app en de poort waarop de app wordt uitgevoerd, moet overeenkomen met niet-localhost adressen.

    Het configuratieoverzicht in dit artikel toont voorbeelden van de juiste configuratie. Controleer zorgvuldig de configuratie op verkeerde instellingen voor apps en IP-adressen.

    Als de configuratie correct wordt weergegeven:

    • Toepassingslogboeken analyseren.

    • Controleer het netwerkverkeer tussen de client-app en de IP- of server-app met de ontwikkelhulpprogramma's van de browser. Vaak wordt een exacte foutmelding of een bericht met een aanwijzing voor wat het probleem veroorzaakt door de IP- of server-app geretourneerd nadat u een aanvraag hebt ingediend. Richtlijnen voor ontwikkelhulpprogramma's vindt u in de volgende artikelen:

    Het documentatieteam reageert op documentfeedback en fouten in artikelen (open een probleem in de sectie Deze pagina feedback), maar kan geen productondersteuning bieden. Er zijn verschillende openbare ondersteuningsforums beschikbaar om u te helpen bij het oplossen van problemen met een app. U wordt aangeraden het volgende te doen:

    De voorgaande forums zijn niet eigendom van of worden beheerd door Microsoft.

    Voor niet-beveiligings-, niet-gevoelige en niet-vertrouwelijke reproduceerbare framework-foutrapporten, een issue openen bij de ASP.NET Core-producteenheid. Open geen melding bij de producteenheid voordat u de oorzaak van een probleem grondig hebt onderzocht en het probleem zelf evenals met behulp van de community op een openbaar ondersteuningsforum niet kunt oplossen. De producteenheid kan geen problemen met afzonderlijke apps oplossen die zijn verbroken vanwege eenvoudige onjuiste configuratie of gebruiksscenario's met betrekking tot services van derden. Als een rapport gevoelig of vertrouwelijk is of een mogelijke beveiligingsfout beschrijft in het product die cyberaanvallers kunnen misbruiken, raadpleegt u Beveiligingsproblemen en bugs (dotnet/aspnetcore GitHub-opslagplaats) melden.

  • Niet-geautoriseerde cliënt voor ME-ID

    info: Autorisatie van Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] is mislukt. Aan deze vereisten is niet voldaan: DenyAnonymousAuthorizationRequirement: Vereist een geverifieerde gebruiker.

    Aanmeldingsoproepfout van ME-ID:

    • Fout: unauthorized_client
    • Beschrijving: AADB2C90058: The provided application is not configured to allow public clients.

    De fout oplossen:

    1. Open in Azure Portal het manifest van de -app.
    2. Stel de allowPublicClient kenmerk- in op null of true.

Cookies en sitegegevens

Cookies en sitegegevens kunnen worden bewaard in app-updates en kunnen het testen en oplossen van problemen verstoren. Wis het volgende tijdens het aanbrengen van wijzigingen in de app-code, gebruikersaccountwijzigingen bij de provider, of wijzigingen in de configuratie van provider-apps:

  • Aanmeldingscookies van gebruikers
  • App-cookies
  • Sitegegevens in cache en opgeslagen

Een benadering om te voorkomen dat achterblijvende cookies en sitegegevens het testen en oplossen van problemen verstoren, is het volgende:

  • Een browser configureren
    • Gebruik een browser om te testen dat u kunt configureren om alle cookie en sitegegevens te verwijderen telkens wanneer de browser wordt gesloten.
    • Zorg ervoor dat de browser handmatig of door de IDE is gesloten voor een wijziging in de configuratie van de app, testgebruiker of provider.
  • Gebruik een aangepaste opdracht om een browser te openen in de InPrivate- of Incognitomodus in Visual Studio:
    • Open Bladeren-met-dialoogvenster vanuit de Uitvoeren knop van Visual Studio.
    • Klik op de knop Toevoegen.
    • Geef het pad naar uw browser op in het veld Program. De volgende uitvoerbare paden zijn typische installatielocaties voor Windows 10. Als uw browser is geïnstalleerd op een andere locatie of als u Windows 10 niet gebruikt, geeft u het pad op naar het uitvoerbare bestand van de browser.
      • 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
    • Geef in het veld Argumenten de opdrachtregeloptie op die de browser gebruikt om in de InPrivate- of Incognitomodus te openen. Voor sommige browsers is de URL van de app vereist.
      • Microsoft Edge: gebruik -inprivate.
      • Google Chrome: gebruik --incognito --new-window {URL}, waarbij de {URL} tijdelijke aanduiding de URL is die moet worden geopend (bijvoorbeeld https://localhost:5001).
      • Mozilla Firefox: Gebruik -private -url {URL}, waarbij de tijdelijke aanduiding voor de {URL} de URL is die moet worden geopend (bijvoorbeeld https://localhost:5001).
    • Geef een naam op in het veld Vriendelijke naam. Bijvoorbeeld Firefox Auth Testing.
    • Selecteer de knop OK.
    • Om te voorkomen dat u het browserprofiel moet selecteren voor elke iteratie van het testen met een app, stelt u het profiel in als de standaardinstelling met de knop Als standaard instellen.
    • Zorg ervoor dat de browser wordt gesloten door de IDE voor elke wijziging in de app, testgebruiker of providerconfiguratie.

App-upgrades

Een werkende app kan onmiddellijk mislukken na het upgraden van de .NET Core SDK op de ontwikkelcomputer of het wijzigen van pakketversies in de app. In sommige gevallen kunnen incoherent pakketten een app breken bij het uitvoeren van belangrijke upgrades. De meeste van deze problemen kunnen worden opgelost door de volgende instructies te volgen:

  1. Wis de NuGet-pakketcaches van het lokale systeem door dotnet nuget locals all --clear uit te voeren vanuit een opdrachtshell.
  2. Verwijder de bin en obj mappen van het project.
  3. Herstel het project en bouw het opnieuw.
  4. Verwijder alle bestanden in de implementatiemap op de server voordat u de app opnieuw implementeert.

Notitie

Het gebruik van pakketversies die niet compatibel zijn met het doelframework van de app, wordt niet ondersteund. Gebruik de NuGet Gallery of FuGet Package Explorervoor informatie over een pakket.

De server-app uitvoeren

Zorg er bij het testen en oplossen van problemen met Blazor Web Appvoor dat u de app uitvoert vanuit het serverproject.

De gebruiker inspecteren

Het volgende UserClaims onderdeel kan rechtstreeks in apps worden gebruikt of dienen als basis voor verdere aanpassing.

UserClaims.razor:

@page "/user-claims"
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]

<PageTitle>User Claims</PageTitle>

<h1>User Claims</h1>

@if (claims.Any())
{
    <ul>
        @foreach (var claim in claims)
        {
            <li><b>@claim.Type:</b> @claim.Value</li>
        }
    </ul>
}

@code {
    private IEnumerable<Claim> claims = Enumerable.Empty<Claim>();

    [CascadingParameter]
    private Task<AuthenticationState>? AuthState { get; set; }

    protected override async Task OnInitializedAsync()
    {
        if (AuthState == null)
        {
            return;
        }

        var authState = await AuthState;
        claims = authState.User.Claims;
    }
}

Aanvullende informatiebronnen