Schützen einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory B2C
In diesem Artikel wird erläutert, wie Sie eine gehostete Blazor WebAssembly-Lösung erstellen, die Azure Active Directory B2C (AAD) für die Authentifizierung verwendet.
Nach dem Lesen dieses Artikels finden Sie weitere Informationen zu Sicherheitsszenarien unter Zusätzliche Sicherheitsszenarios für ASP.NET Core Blazor WebAssembly.
Exemplarische Vorgehensweise
In den Unterabschnitten der exemplarischen Vorgehensweise wird Folgendes erläutert:
- Erstellen eines Mandanten in Azure
- Registrieren einer Server-API-App in Azure
- Registrieren einer Client-App in Azure
- Erstellen der Blazor-App
- Ändern des Standardschemas für den Zugriffstokenbereich
- Ausführen der App
Erstellen eines Mandanten in Azure
Befolgen Sie die Anweisungen unter Tutorial: Erstellen eines Azure Active Directory B2C-Mandanten, um einen AAD B2C-Mandanten zu erstellen.
Bevor Sie mit den Anleitungen in diesem Artikel fortfahren, vergewissern Sie sich, dass Sie das richtige Verzeichnis für den AAD B2C-Mandanten ausgewählt haben.
Registrieren einer Server-API-App in Azure
Registrieren einer AAD B2C-App für die Server-API-App:
- Navigieren Sie im Azure-Portal zu Azure AD B2C. Wählen Sie auf der Seitenleiste App-Registrierungen aus. Klicken Sie auf die Schaltfläche Neue Registrierung.
- Geben Sie einen Namen für die App an (z. B. Blazor Server AAD B2C).
- Wählen Sie für Unterstützte Kontotypen die Option für mehrere Mandanten aus: Konten in einem beliebigen Identitätsanbieter oder Organisationsverzeichnis (zum Authentifizieren von Benutzern mit Benutzerflows)
- Die Server-API-App erfordert in diesem Szenario keinen Umleitungs-URI. Treffen Sie in der Dropdownliste Plattform auswählen keine Auswahl, und geben Sie keinen Umleitungs-URI ein.
- Vergewissern Sie sich, dass die Option Berechtigungen>Administratoreinwilligung für openid- und offline_access-Berechtigungen erteilen ausgewählt ist.
- Wählen Sie Registrieren.
Notieren Sie sich folgende Informationen:
- Anwendungs-ID (Client-ID) der Server-API-App (z. B.
41451fa7-82d9-4673-8fa5-69eff5a761fd
) - AAD B2C-Instanz (z. B.
https://contoso.b2clogin.com/
, wobei der nachgestellte Schrägstrich enthalten ist) Die Instanz ist das Schema und der Host einer Azure-B2B-App-Registrierung, die Sie im Fenster Endpunkte auf der Seite App-Registrierungen im Azure-Portal finden. - Primäre Domäne, Herausgeberdomäne oder Mandantendomäne (z. B.
contoso.onmicrosoft.com
): Die Domäne ist für die registrierte App als Herausgeberdomäne auf dem Blatt Branding im Azure-Portal verfügbar.
Wählen Sie API verfügbar machen auf der Seitenleiste aus und folgen Sie diesen Schritten:
- Wählen Sie Bereich hinzufügen.
- Wählen Sie Speichern und fortfahren aus.
- Geben Sie einen Bereichsnamen an (z. B.
API.Access
). - Geben Sie einen Anzeigenamen der Administratorzustimmung an (z. B.
Access API
). - Geben Sie eine Beschreibung der Administratorzustimmung an (z. B.
Allows the app to access server app API endpoints.
). - Vergewissern Sie sich, dass Zustand auf Aktiviert gesetzt ist.
- Wählen Sie Bereich hinzufügen aus.
Notieren Sie sich folgende Informationen:
- URI-GUID der App-ID (z. B. Datensatz
41451fa7-82d9-4673-8fa5-69eff5a761fd
vonhttps://contoso.onmicrosoft.com/41451fa7-82d9-4673-8fa5-69eff5a761fd
) - Bereichsname (beispielsweise
API.Access
)
Registrieren einer Client-App in Azure
Registrieren einer AAD B2C-App für die Client-App:
- Navigieren Sie im Azure-Portal zu Azure AD B2C. Wählen Sie auf der Seitenleiste App-Registrierungen aus. Klicken Sie auf die Schaltfläche Neue Registrierung.
- Geben Sie einen Namen für die App an (z. B. Blazor Client AAD B2C).
- Wählen Sie für Unterstützte Kontotypen die Option für mehrere Mandanten aus: Konten in einem beliebigen Identitätsanbieter oder Organisationsverzeichnis (zum Authentifizieren von Benutzern mit Benutzerflows)
- Legen Sie für die Dropdownliste Umleitungs-URI die Option Single-Page-Anwendung (SPA) fest, und geben Sie für den Umleitungs-URI den Wert
https://localhost/authentication/login-callback
an. Wenn Sie den Produktionsumleitungs-URI für den Azure-Standardhost (z. B.azurewebsites.net
) oder den benutzerdefinierten Domänenhost (z. B.contoso.com
) kennen, können Sie den Produktionsumleitungs-URI gleichzeitig mit dem Umleitungs-URI fürlocalhost
hinzufügen. Achten Sie darauf, die Portnummer für andere Ports als:443
in alle von Ihnen hinzugefügten Produktionsumleitungs-URIs einzuschließen. - Vergewissern Sie sich, dass die Option Berechtigungen>Administratoreinwilligung für openid- und offline_access-Berechtigungen erteilen ausgewählt ist.
- Wählen Sie Registrieren.
Hinweis
Die Angabe der Portnummer für einen AAD B2C-Umleitungs-URI für localhost
ist nicht erforderlich. Weitere Informationen finden Sie unter Einschränkungen und Beschränkungen der Redirect URI (Antwort-URL): Localhost-Ausnahmen (Entra-Dokumentation).
Notieren Sie sich die Anwendungs-ID (Client-ID) der Client-App (z. B. 4369008b-21fa-427c-abaa-9b53bf58e538
).
Unter Authentifizierung>Plattformkonfigurationen>Single-Page-Webanwendung:
- Vergewissern Sie sich, dass der Umleitungs-URI von
https://localhost/authentication/login-callback
vorhanden ist. - Stellen Sie sicher, dass im Abschnitt Implizite Gewährung die Kontrollkästchen Zugriffstoken und ID-Token nicht aktiviert sind. Die implizite Gewährung wird für Blazor-Apps mit MSAL v2.0 oder höher nicht empfohlen. Weitere Informationen finden Sie im Artikel Schützen der Blazor WebAssembly in ASP.NET Core.
- Die verbleibenden Standardwerte für die App müssen für dieses Szenario nicht angepasst werden.
- Wählen Sie die Schaltfläche Speichern aus, wenn Sie Änderungen vorgenommen haben.
In API-Berechtigungen über die Randleiste:
- Klicken Sie auf Berechtigung hinzufügen und dann auf Meine APIs.
- Wählen Sie die Server-API-App aus der Spalte Name aus (z. B. Blazor Server AAD B2C). Sie müssen Besitzer der App-Registrierung (und bei einer eine separaten App auch der API-App-Registrierung) sein, damit die API im Bereich Meine APIs des Azure-Portals angezeigt wird. Weitere Informationen finden Sie in der Microsoft Entra-Dokumentation unter Zuweisen des Anwendungsbesitzers.
- Öffnen Sie die API-Liste, falls sie nicht bereits geöffnet ist.
- Aktivieren Sie den Zugriff auf die API (z. B.
API.Access
) mit dem Kontrollkästchen. - Wählen Sie Berechtigungen hinzufügen aus.
- Klicken Sie auf die Schaltfläche Administratoreinwilligung für {MANDANTENNAME} erteilen. Klicken Sie auf Ja, um zu bestätigen.
Wichtig
Wenn Sie im letzten Konfigurationsschritt der API-Berechtigungen nicht berechtigt sind, dem Mandanten die Administratoreinwilligung zu erteilen, da die Zustimmung zur Verwendung der App an Benutzer*innen delegiert wird, müssen Sie die folgenden zusätzlichen Schritte ausführen:
- Die App muss eine vertrauenswürdige Herausgeberdomäne verwenden.
- Wählen Sie in der Konfiguration der
Server
-App im Azure-Portal Eine API verfügbar machen aus. Wählen Sie unter Autorisierte Clientanwendungen die Schaltfläche Eine Clientanwendung hinzufügen aus. Fügen Sie die Anwendungs-ID (Client-ID) derClient
-App (z. B.4369008b-21fa-427c-abaa-9b53bf58e538
) hinzu.
Kehren Sie im Azure-Portal zu Azure AD B2C zurück. Wählen Sie Benutzerabläufe aus, und verwenden Sie die folgende Anleitung: Erstellen eines Benutzerablaufs für Registrierung und Anmeldung. Wählen Sie mindestens Anwendungsansprüche für den Benutzerablauf der Registrierung/Anmeldung aus, und aktivieren Sie dann das Kontrollkästchen für das Benutzerattribut Anzeigename, um context.User.Identity?.Name
/context.User.Identity.Name
in der LoginDisplay
-Komponente (Shared/LoginDisplay.razor
) aufzufüllen.
Notieren Sie sich den Namen des für die App erstellten Benutzerflows für die Registrierung und Anmeldung (z. B. B2C_1_signupsignin1
).
Erstellen der Blazor-App
Ersetzen Sie die Platzhalter im folgenden Befehl durch die zuvor notierten Informationen, und führen Sie den Befehl in einer Befehlsshell aus:
dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --api-client-id "{SERVER API APP CLIENT ID}" --app-id-uri "{SERVER API APP ID URI GUID}" --client-id "{CLIENT APP CLIENT ID}" --default-scope "{DEFAULT SCOPE}" --domain "{TENANT DOMAIN}" -ho -o {PROJECT NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
Warnung
Verwenden Sie keine Bindestriche (-
) im App-Namen ({PROJECT NAME}
), da die Formatierung des OIDC-App-Bezeichners dadurch beeinträchtigt wird. Die Logik in der Blazor WebAssembly-Projektvorlage verwendet den Projektnamen für einen OIDC-App-Bezeichner in der Projektmappenkonfiguration. Die Pascal-Schreibweise (BlazorSample
) oder Unterstriche (Blazor_Sample
) stellen akzeptable Alternativen dar. Weitere Informationen finden Sie unter Bindestriche in gehostetem Blazor WebAssembly-Projektnamen beeinträchtigen OIDC-Sicherheit (dotnet/aspnetcore 35337).
Platzhalter | Name im Azure-Portal | Beispiel |
---|---|---|
{AAD B2C INSTANCE} |
Instanz | https://contoso.b2clogin.com/ (enthält den nachstehenden Schrägstrich) |
{PROJECT NAME} |
— | BlazorSample |
{CLIENT APP CLIENT ID} |
Anwendungs-ID (Client-ID) für die Client -App | 4369008b-21fa-427c-abaa-9b53bf58e538 |
{DEFAULT SCOPE} |
Bereichsname | API.Access |
{SERVER API APP CLIENT ID} |
Anwendungs-ID (Client-ID) für die Server -App | 41451fa7-82d9-4673-8fa5-69eff5a761fd |
{SERVER API APP ID URI GUID} |
GUID des Anwendungs-ID-URI | 41451fa7-82d9-4673-8fa5-69eff5a761fd (NUR GUID entspricht standardmäßig der {SERVER API APP CLIENT ID} ) |
{SIGN UP OR SIGN IN POLICY} |
Benutzerflow für die Registrierung oder Anmeldung | B2C_1_signupsignin1 |
{TENANT DOMAIN} |
Primäre, Herausgeber- oder Mandantendomäne | contoso.onmicrosoft.com |
Der mit der Option -o|--output
angegebene Ausgabespeicherort erstellt einen Projektordner, sofern kein solcher vorhanden ist, und wird Teil des Projektnamens. Verwenden Sie keine Bindestriche (-
) im App-Namen, da die Formatierung des OIDC-App-Bezeichners dadurch beeinträchtigt wird (vgl. vorherige Warnung).
Ausführen der App
Führen Sie die App aus dem Projekt Server
heraus aus. Wenn Sie Visual Studio verwenden, haben Sie folgende beiden Möglichkeiten:
Wählen Sie den Dropdownpfeil neben der Schaltfläche Ausführen aus. Öffnen Sie in der Dropdownliste Startprojekte konfigurieren. Wählen Sie die Option Einzelnes Startprojekt aus. Bestätigen oder ändern Sie das Projekt für das Startprojekt in
Server
-Projekt.Vergewissern Sie sich, dass das Projekt
Server
im Projektmappen-Explorer hervorgehoben ist, bevor Sie die App mit einem der folgenden Ansätze starten:- Wählen Sie die Schaltfläche Ausführen.
- Verwenden Sie im Menü Debuggen>Debuggen starten.
- Drücken Sie F5.
Navigieren Sie in einer Befehlsshell zum Projektordner
Server
der Projektmappe. Führen Sie den Befehldotnet watch
(oderdotnet run
) aus.
Benutzerdefinierte Richtlinien
Die Microsoft-Authentifizierungsbibliothek (Microsoft.Authentication.WebAssembly.Msal, NuGet-Paket) unterstützt standardmäßig keine benutzerdefinierten AAD B2C-Richtlinien.
Konfigurieren von User.Identity.Name
Der Leitfaden in diesem Abschnitt umfasst optional das Auffüllen von User.Identity.Name
mit dem Wert aus dem name
-Anspruch.
Standardmäßig füllt die Server -App-API User.Identity.Name
mit dem Wert aus dem http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
-Anspruchstyp (z. B. 2d64b3da-d9d5-42c6-9352-53d8df33d770@contoso.onmicrosoft.com
) auf.
So konfigurieren Sie die App, um den Wert vom name
-Anspruchstyp zu empfangen:
Fügen Sie einen Namespace für Microsoft.AspNetCore.Authentication.JwtBearer am Anfang der
Program
-Datei hinzu:using Microsoft.AspNetCore.Authentication.JwtBearer;
Konfigurieren Sie die TokenValidationParameters.NameClaimType der JwtBearerOptions in der
Program
Datei:builder.Services.Configure<JwtBearerOptions>( JwtBearerDefaults.AuthenticationScheme, options => { options.TokenValidationParameters.NameClaimType = "name"; });
Bestandteile der Lösung
In diesem Abschnitt wird erläutert, welche Teile einer Projektmappe aus der Blazor WebAssembly-Projektvorlage generiert werden und wie die Client- und Server-Projekte der Projektmappe konfiguriert werden. Es gibt in diesem Abschnitt keine speziellen Anleitungen für eine grundlegende funktionierende Anwendung, wenn Sie die App mithilfe der Anweisungen im Abschnitt Vorgehensweise erstellt haben. Die Anweisungen in diesem Abschnitt sind hilfreich, um die App mit Features zur Authentifizierung und Autorisierung von Benutzer*innen zu ergänzen. Eine alternativer Ansatz zum Aktualisieren einer App besteht darin, eine neue App anhand der Anweisungen im Abschnitt Vorgehensweise zu erstellen und die Komponenten, Klassen und Ressourcen der App in die neue App zu verschieben.
appsettings.json
-Konfiguration
Dieser Abschnitt bezieht sich auf die Server -App der Lösung.
Die Datei appsettings.json
enthält die Optionen zum Konfigurieren des JWT-Bearerhandlers, der zum Überprüfen von Zugriffstoken verwendet wird:
{
"AzureAdB2C": {
"Instance": "https://{TENANT}.b2clogin.com/",
"ClientId": "{SERVER API APP CLIENT ID}",
"Domain": "{TENANT DOMAIN}",
"Scopes": "{DEFAULT SCOPE}",
"SignUpSignInPolicyId": "{SIGN UP OR SIGN IN POLICY}"
}
}
Beispiel:
{
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com/",
"ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
"Domain": "contoso.onmicrosoft.com",
"Scopes": "API.Access",
"SignUpSignInPolicyId": "B2C_1_signupsignin1",
}
}
Authentifizierungspaket
Dieser Abschnitt bezieht sich auf die Server -App der Lösung.
Die Unterstützung für die Authentifizierung und Autorisierung von Aufrufen von ASP.NET Core-Web-APIs mit der Microsoft Identity Platform wird vom Paket Microsoft.Identity.Web
bereitgestellt.
Hinweis
Einen Leitfaden zum Hinzufügen von Paketen zu .NET-Apps finden Sie in Installieren und Verwalten von Paketen unter Workflow der Nutzung von Paketen (NuGet-Dokumentation). Überprüfen Sie unter NuGet.org, ob die richtige Paketversion verwendet wird.
Die Server -App einer gehosteten Blazor-Lösung, die aus der Vorlage Blazor WebAssembly erstellt wurde, enthält standardmäßig das Microsoft.Identity.Web.UI
-Paket. Das Paket fügt eine Benutzeroberfläche für die Benutzerauthentifizierung in Web-Apps hinzu und wird vom Blazor-Framework nicht verwendet. Wenn die Server-App nicht verwendet wird, um Benutzer*innen direkt zu authentifizieren, kann der Paketverweis problemlos aus der Projektdatei der Server-App entfernt werden.
Unterstützung für Authentifizierungsdienste
Dieser Abschnitt bezieht sich auf die Server -App der Lösung.
Die AddAuthentication
-Methode richtet Authentifizierungsdienste innerhalb der App ein und konfiguriert den JWT-Bearerhandler als Standardauthentifizierungsmethode. Mit der AddMicrosoftIdentityWebApi-Methode werden Dienste konfiguriert, um die Web-API mit Microsoft Identity Platform v 2.0 zu schützen. Diese Methode erwartet einen AzureAdB2C
-Abschnitt in der App-Konfiguration mit den erforderlichen Einstellungen zum Initialisieren der Authentifizierungsoptionen.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAdB2C"));
Hinweis
Wenn ein einzelnes Authentifizierungsschema registriert ist, wird es automatisch als Standardschema der App verwendet, und es ist nicht erforderlich, das Schema auf AddAuthentication oder über AuthenticationOptions anzugeben. Weitere Informationen finden Sie in der Übersicht über die ASP.NET Core- Authentifizierung und in der ASP.NET Core-Ankündigung (aspnet/Announcements #490).
UseAuthentication und UseAuthorization stellen Folgendes sicher:
- Die App versucht, Token auf eingehende Anforderungen zu analysieren und zu überprüfen.
- Jede Anforderung, die versucht, ohne die richtigen Anmeldeinformationen auf eine geschützte Ressource zuzugreifen, schlägt fehl.
app.UseAuthorization();
WeatherForecast-Controller
Dieser Abschnitt bezieht sich auf die Server -App der Lösung.
Der WeatherForecast
-Controller (Controllers/WeatherForecastController.cs
) macht eine geschützte API mit dem [Authorize]
-Attribut verfügbar, das auf den Controller angewandt wird. Es ist wichtig, Folgendes zu verstehen:
- Das
[Authorize]
-Attribut in diesem API-Controller ist die einzige Möglichkeit, diese API vor nicht autorisiertem Zugriff zu schützen. - Das in der Blazor WebAssembly-App verwendete
[Authorize]
-Attribut dient nur als Hinweis für die App, dass der Benutzer autorisiert sein sollte, damit die App richtig funktioniert.
[Authorize]
[ApiController]
[Route("[controller]")]
[RequiredScope(RequiredScopesConfigurationKey = "AzureAdB2C:Scopes")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
...
}
}
wwwroot/appsettings.json
-Konfiguration
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die Konfiguration wird durch die Datei wwwroot/appsettings.json
bereitgestellt:
{
"AzureAdB2C": {
"Authority": "{AAD B2C INSTANCE}{TENANT DOMAIN}/{SIGN UP OR SIGN IN POLICY}",
"ClientId": "{CLIENT APP CLIENT ID}",
"ValidateAuthority": false
}
}
In der vorherigen Konfiguration enthält die {AAD B2C INSTANCE}
einen nachstehenden Schrägstrich.
Beispiel:
{
"AzureAdB2C": {
"Authority": "https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin1",
"ClientId": "4369008b-21fa-427c-abaa-9b53bf58e538",
"ValidateAuthority": false
}
}
Authentifizierungspaket
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Wenn eine App zum Verwenden eines B2C-Einzelkontos (IndividualB2C
) erstellt wird, erhält die App automatisch einen Paketverweis für die Microsoft-Authentifizierungsbibliothek (Microsoft.Authentication.WebAssembly.Msal
). Das Paket stellt einige Primitive bereit, die der App beim Authentifizieren von Benutzern und beim Abrufen von Token zum Aufrufen geschützter APIs helfen.
Wenn Sie einer App eine Authentifizierung hinzufügen, fügen Sie das Paket Microsoft.Authentication.WebAssembly.Msal
der App manuell hinzu:
Hinweis
Einen Leitfaden zum Hinzufügen von Paketen zu .NET-Apps finden Sie in Installieren und Verwalten von Paketen unter Workflow der Nutzung von Paketen (NuGet-Dokumentation). Überprüfen Sie unter NuGet.org, ob die richtige Paketversion verwendet wird.
Das Microsoft.Authentication.WebAssembly.Msal
-Paket fügt der App das Microsoft.AspNetCore.Components.WebAssembly.Authentication
-Paket transitiv hinzu.
Unterstützung für Authentifizierungsdienste
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Es wird Unterstützung für HttpClient-Instanzen hinzugefügt, die bei Anforderungen an das Serverprojekt Zugriffstoken einschließen.
In der Program
-Datei:
builder.Services.AddHttpClient("{PROJECT NAME}.ServerAPI", client =>
client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
.CreateClient("{PROJECT NAME}.ServerAPI"));
Der Platzhalter {PROJECT NAME}
ist der Projektname bei der Projektmappenerstellung. Wenn Sie z. B. einen Projektnamen von BlazorSample
angeben, wird ein benannter HttpClient von BlazorSample.ServerAPI
erzeugt.
Die Unterstützung für die Authentifizierung von Benutzern wird im Dienstcontainer mit der vom Paket Microsoft.Authentication.WebAssembly.Msal
bereitgestellten AddMsalAuthentication-Erweiterungsmethode registriert. Diese Methode richtet die Dienste ein, die erforderlich sind, damit die App mit dem Identitätsanbieter interagiert.
In der Program
-Datei:
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Der {SCOPE URI}
ist der Standardbereich des Zugriffstokens (z. B. https://contoso.onmicrosoft.com/41451fa7-82d9-4673-8fa5-69eff5a761fd/API.Access
oder der benutzerdefinierte URI, den Sie im Azure-Portal konfiguriert haben).
Die AddMsalAuthentication-Methode akzeptiert einen Rückruf zum Konfigurieren der für die Authentifizierung der App erforderlichen Parameter. Die zum Konfigurieren der App erforderlichen Werte können von der AAD-Konfiguration im Azure-Portal beim Registrieren der App abgerufen werden.
Zugriffstokenbereiche
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Zu den Standard-Zugriffstokenbereichen zählen die Zugriffstokenbereiche, auf die Folgendes zutrifft:
- standardmäßig in der Anmeldeanforderung enthalten
- zum Bereitstellen eines Zugriffstokens direkt nach der Authentifizierung verwendet
Alle Bereiche müssen gemäß den Microsoft Entra ID-Regeln zur selben App gehören. Zusätzliche Bereiche können nach Bedarf für zusätzliche API-Apps hinzugefügt werden:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
Geben Sie zusätzliche Bereiche mit AdditionalScopesToConsent
an:
options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");
Hinweis
AdditionalScopesToConsent ist nicht in der Lage, über die Zustimmungsoberfläche von Microsoft Entra ID delegierte Benutzerberechtigungen für Microsoft Graph bereitzustellen, wenn ein Benutzer zum ersten Mal eine App verwendet, die in Microsoft Azure registriert ist. Weitere Informationen finden Sie unter Verwenden der Graph-API mit ASP.NET CoreBlazor WebAssembly.
Beispiel für den Standardzugriffstokenbereich:
options.ProviderOptions.DefaultAccessTokenScopes.Add(
"https://contoso.onmicrosoft.com/41451fa7-82d9-4673-8fa5-69eff5a761fd/API.Access");
Weitere Informationen finden Sie in den folgenden Abschnitten des Artikels zu zusätzlichen Szenarios:
Anmeldemodus
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Das Framework ist standardmäßig auf den Popup-Anmeldemodus festgelegt und greift auf den Umleitungsanmeldemodus zurück, wenn kein Popup geöffnet werden kann. Konfigurieren Sie MSAL, um den Umleitungsanmeldemodus zu verwenden, indem Sie die LoginMode
-Eigenschaft von MsalProviderOptions auf redirect
festlegen:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.LoginMode = "redirect";
});
Die Standardeinstellung ist popup
, und der Zeichenfolgenwert berücksichtigt keine Groß-/Kleinschreibung.
Imports-Datei
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Der Microsoft.AspNetCore.Components.Authorization-Namespace wird in der gesamten App über die _Imports.razor
-Datei verfügbar gemacht:
@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
Indexseite
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die Indexseite (wwwroot/index.html
) enthält ein Skript, das den AuthenticationService
in JavaScript definiert. AuthenticationService
behandelt die Details des OIDC-Protokolls auf niedriger Ebene. Die App ruft intern die im Skript definierten Methoden auf, um die Authentifizierungsvorgänge auszuführen.
<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
App-Komponente
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die App
-Komponente (App.razor
) ähnelt der in den Blazor Server-Apps gefundenen App
-Komponente:
- Die CascadingAuthenticationState-Komponente verwaltet das Verfügbarmachen der AuthenticationState-Komponente für die restliche App.
- Die AuthorizeRouteView-Komponente stellt sicher, dass der aktuelle Benutzer autorisiert ist, auf eine bestimmte Seite zuzugreifen; andernfalls wird die
RedirectToLogin
-Komponente gerendert. - Die
RedirectToLogin
-Komponente verwaltet die Umleitung nicht autorisierter Benutzer auf die Anmeldeseite.
Aufgrund von Änderungen im Framework in den verschiedenen Releases von ASP.NET Core wird in diesem Abschnitt kein Razor-Markup für die Komponente App
(App.razor
) angezeigt. Wenn Sie das Markup der Komponente für ein bestimmtes Release überprüfen möchten, verwenden Sie einen der folgenden Ansätze:
Erstellen Sie eine für die Authentifizierung bereitgestellte App aus der Blazor WebAssembly-Standardprojektvorlage für die Version von ASP.NET Core, die Sie verwenden möchten. Untersuchen Sie die
App
-Komponente (App.razor
) in der generierten App.Untersuchen Sie die
App
-Komponente (App.razor
) in der Verweisquelle. Wählen Sie die Version aus der Verzweigungsselektor aus, und suchen Sie nach der Komponente imProjectTemplates
-Ordner des Repositorys, da sie im Laufe der Jahre verschoben wurde.Hinweis
Dokumentationslinks zur .NET-Referenzquelle laden in der Regel den Standardbranch des Repositorys, der die aktuelle Entwicklung für das nächste Release von .NET darstellt. Um ein Tag für ein bestimmtes Release auszuwählen, wählen Sie diesen mit der Dropdownliste Switch branches or tags (Branches oder Tags wechseln) aus. Weitere Informationen finden Sie unter How to select a version tag of ASP.NET Core source code (dotnet/AspNetCore.Docs #26205) (Auswählen eines Versionstags von ASP.NET Core-Quellcode (dotnet/AspNetCore.Docs #26205)).
RedirectToLogin-Komponente
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die RedirectToLogin
-Komponente (RedirectToLogin.razor
):
- Verwaltet die Umleitung nicht autorisierter Benutzer auf die Anmeldeseite.
- Die aktuelle URL, auf die der Benutzer zuzugreifen versucht, wird beibehalten, damit er zu dieser Seite zurückkehren kann, wenn die Authentifizierung erfolgreich Folgendes verwendet:
- Navigationsverlaufsstatus in ASP.NET Core in .NET 7 oder höher.
- Eine Abfragezeichenfolge in ASP.NET Core in .NET 6 oder früher.
Untersuchen Sie die RedirectToLogin
-Komponente in der Verweisquelle. Der Speicherort der Komponente wurde im Laufe der Zeit geändert. Verwenden Sie daher GitHub-Suchtools, um die Komponente zu finden.
Hinweis
Dokumentationslinks zur .NET-Referenzquelle laden in der Regel den Standardbranch des Repositorys, der die aktuelle Entwicklung für das nächste Release von .NET darstellt. Um ein Tag für ein bestimmtes Release auszuwählen, wählen Sie diesen mit der Dropdownliste Switch branches or tags (Branches oder Tags wechseln) aus. Weitere Informationen finden Sie unter How to select a version tag of ASP.NET Core source code (dotnet/AspNetCore.Docs #26205) (Auswählen eines Versionstags von ASP.NET Core-Quellcode (dotnet/AspNetCore.Docs #26205)).
LoginDisplay-Komponente
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die LoginDisplay
-Komponente (LoginDisplay.razor
) wird in der MainLayout
-Komponente (MainLayout.razor
) gerendert, und sie verwaltet die folgenden Verhaltensweisen:
- Für authentifizierte Benutzer:
- Zeigt den aktuellen Benutzernamen an
- Stellt einen Link zur Benutzerprofilseite in ASP.NET Core-Identity bereit
- Bietet eine Schaltfläche zum Abmelden von der App
- Für anonyme Benutzer:
- Bietet die Option zum Registrieren
- Bietet die Option zur Anmeldung
Aufgrund von Änderungen im Framework in den verschiedenen Releases von ASP.NET Core wird in diesem Abschnitt kein Razor-Markup für die Komponente LoginDisplay
angezeigt. Wenn Sie das Markup der Komponente für ein bestimmtes Release überprüfen möchten, verwenden Sie einen der folgenden Ansätze:
Erstellen Sie eine für die Authentifizierung bereitgestellte App aus der Blazor WebAssembly-Standardprojektvorlage für die Version von ASP.NET Core, die Sie verwenden möchten. Überprüfen Sie die Komponente
LoginDisplay
in der generierten App.Überprüfen Sie die Komponente
LoginDisplay
in der Verweisquelle. Der Speicherort der Komponente wurde im Laufe der Zeit geändert. Verwenden Sie daher GitHub-Suchtools, um die Komponente zu finden. Es wird der vorlagenbasierte Inhalt fürHosted
gleichtrue
verwendet.Hinweis
Dokumentationslinks zur .NET-Referenzquelle laden in der Regel den Standardbranch des Repositorys, der die aktuelle Entwicklung für das nächste Release von .NET darstellt. Um ein Tag für ein bestimmtes Release auszuwählen, wählen Sie diesen mit der Dropdownliste Switch branches or tags (Branches oder Tags wechseln) aus. Weitere Informationen finden Sie unter How to select a version tag of ASP.NET Core source code (dotnet/AspNetCore.Docs #26205) (Auswählen eines Versionstags von ASP.NET Core-Quellcode (dotnet/AspNetCore.Docs #26205)).
Authentication-Komponente
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die von der Komponente Authentication
(Pages/Authentication.razor
) erstellte Seite definiert die Routen, die für die Verarbeitung unterschiedlicher Authentifizierungsstufen erforderlich sind.
Die Komponente RemoteAuthenticatorView:
- Wird vom Paket
Microsoft.AspNetCore.Components.WebAssembly.Authentication
bereitgestellt. - Verwaltet die entsprechenden Aktionen in jeder Phase der Authentifizierung.
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />
@code {
[Parameter]
public string? Action { get; set; }
}
Hinweis
Nullwerte zulassende Verweistypen (Nullable Reference Types, NRTs) und die statische Analyse des NULL-Zustands des .NET-Compilers wird in ASP.NET Core in .NET 6 oder höher unterstützt. Vor der Veröffentlichung von ASP.NET Core in .NET 6 wird der string
-Typ ohne die NULL-Typbezeichnung (?
) angezeigt.
FetchData-Komponente
Dieser Abschnitt bezieht sich auf die Client -App der Lösung.
Die FetchData
-Komponente zeigt Folgendes:
- Stellen Sie ein Zugriffstoken bereit.
- Verwenden Sie das Zugriffstoken zum Aufrufen einer geschützten Ressourcen-API in der Server-App.
Die @attribute [Authorize]
-Anweisung zeigt dem Blazor WebAssembly-Autorisierungssystem an, dass der Benutzer autorisiert werden muss, um diese Komponente anzuzeigen. Das Vorhandensein des Attributs in der Client
-App verhindert nicht, dass die API auf dem Server ohne die richtigen Anmeldeinformationen aufgerufen wird. Die Server
-App muss auch [Authorize]
auf den entsprechenden Endpunkten verwenden, um sie ordnungsgemäß zu schützen.
IAccessTokenProvider.RequestAccessToken übernimmt die Anforderung eines Zugriffstokens, das der Anforderung zum Aufrufen der API hinzugefügt werden kann. Wenn das Token zwischengespeichert wurde oder der Dienst ohne Benutzerinteraktion ein neues Zugriffstoken bereitstellen kann, wird die Tokenanforderung erfolgreich ausgeführt. Andernfalls schlägt die Tokenanforderung mit einer AccessTokenNotAvailableException fehl, die in einer try-catch
-Anweisung abgefangen wird.
Um das eigentliche Token abzurufen, das in die Anforderung aufgenommen werden soll, muss die App überprüfen, ob die Anforderung erfolgreich war, indem tokenResult.TryGetToken(out var token)
aufgerufen wird.
Wenn die Anforderung erfolgreich ausgeführt wurde, wird die Tokenvariable mit dem Zugriffstoken aufgefüllt. Die AccessToken.Value-Eigenschaft des Tokens macht die Literalzeichenfolge verfügbar, die im Authorization
-Anforderungsheader enthalten sein soll.
Wenn bei der Anforderung ein Fehler aufgetreten ist, weil das Token ohne Benutzerinteraktion nicht bereitgestellt werden konnte, geschieht Folgendes:
- ASP.NET Core in .NET 7 oder höher: Die App navigiert mit den angegebenen
AccessTokenResult.InteractionOptions
zuAccessTokenResult.InteractiveRequestUrl
, um die Aktualisierung des Zugriffstokens zu ermöglichen. - ASP.NET Core in .NET 6 oder früher: Das Tokenergebnis enthält eine Umleitungs-URL. Wenn der Benutzer zu dieser URL navigiert, gelangt er zur Anmeldeseite und nach einer erfolgreichen Authentifizierung zurück zur aktuellen Seite.
@page "/fetchdata"
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using {APP NAMESPACE}.Shared
@attribute [Authorize]
@inject HttpClient Http
...
@code {
private WeatherForecast[] forecasts;
protected override async Task OnInitializedAsync()
{
try
{
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
}
catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
}
}
}
Problembehandlung
Logging
Informationen zum Aktivieren der Debugging- oder Überwachungsprotokollierung für die Blazor WebAssembly-Authentifizierung finden Sie im Abschnitt Clientseitige Authentifizierungsprotokollierung im Artikel Blazor-Protokollierung in ASP.NET Core unter der Artikelversion ASP.NET Core 7.0 oder höher.
Häufige Fehler
Falsche Konfiguration der App oder des Identity-Anbieters (Identity Provider, IP)
Die häufigsten Fehler werden durch eine falsche Konfiguration verursacht. Im Folgenden finden Sie einige Beispiele:
- In Abhängigkeit von den Anforderungen des Szenarios verhindert eine fehlende oder falsche Autorität, Instanz, Mandanten-ID, Mandantendomäne oder Client-ID oder ein fehlender oder falscher Umleitungs-URI, dass Clients von einer App authentifiziert werden.
- Falsche Anforderungsbereiche verhindern, dass Clients auf die Web-API-Endpunkte des Servers zugreifen können.
- Falsche oder fehlende Server-API-Berechtigungen verhindern, dass Clients auf Server-Web-API-Endpunkte zugreifen können.
- Das Ausführen der App an einem anderen Port als dem, der im Umleitungs-URI der App-Registrierung für die IP konfiguriert ist. Beachten Sie, dass für Microsoft Entra ID und eine App, die unter einer
localhost
-Entwicklungstestadresse ausgeführt wird, kein Port erforderlich ist. Die Portkonfiguration der App und der Port, an dem die App ausgeführt wird, müssen bei Nicht-localhost
-Adressen jedoch übereinstimmen.
Die Konfigurationsabschnitte in den Anleitungen in diesem Artikel enthalten Beispiele für die richtige Konfiguration. Lesen Sie jeden Abschnitt des Artikels sorgfältig durch, und achten Sie auf falsche App- und IP-Konfigurationen.
Wenn die Konfiguration anscheinend korrekt ist:
Analysieren Sie Anwendungsprotokolle.
Überprüfen Sie den Netzwerkdatenverkehr zwischen der Client-App und dem IP oder der Server-App mit den Entwicklertools des Browsers. Häufig wird vom IP oder von der Server-App eine präzise Fehlermeldung oder eine Meldung mit einem Hinweis auf die Ursache des Problems zurückgegeben, nachdem eine Anforderung erfolgt ist. Anleitungen zu den Entwicklertools finden Sie in den folgenden Artikeln:
- Google Chrome (Google-Dokumentation)
- Microsoft Edge
- Mozilla Firefox (Mozilla-Dokumentation)
Decodieren Sie bei Blazor-Releases, in denen ein JSON Web Token (JWT) verwendet wird, den Inhalt des Tokens, das für die Authentifizierung eines Clients oder den Zugriff auf die Web-API des Servers verwendet wird. Letzteres hängt davon ab, wo das Problem auftritt. Weitere Informationen finden Sie unter Überprüfen des Inhalts eines JSON Web Tokens (JWT).
Das Dokumentationsteam berücksichtigt Feedback zur Dokumentation und zu Fehlern in Artikeln. (Legen Sie im Feedbackbereich auf dieser Seite ein Ticket an.) Es leistet jedoch keinen Produktsupport. Es gibt einige öffentliche Supportforen, die bei der Problembehandlung für eine App weiterhelfen. Es wird Folgendes empfohlen:
Die genannten Foren werden nicht von Microsoft betrieben oder kontrolliert.
Bei nicht sicherheitsbezogenen, nicht sensiblen und nicht vertraulichen Fehlerberichten zum Framework wird legen Sie ein Ticket für die ASP.NET Core-Produkteinheit an. Legen Sie ein Ticket für die Produkteinheit erst an, wenn Sie die Ursache eines Problems gründlich untersucht haben und es nicht selbst oder mithilfe der Community in einem öffentlichen Supportforum lösen konnten. Die Produkteinheit kann keine Problembehandlung für einzelne Apps durchführen, die aufgrund einer einfachen Fehlkonfiguration oder in Anwendungsfällen mit Drittanbieterdiensten nicht funktionieren. Wenn ein Bericht sensibler oder vertraulicher Natur ist oder eine potenzielle Sicherheitslücke im Produkt beschreibt, die von Angreifern ausgenutzt werden könnte, lesen Sie bitte den Abschnitt Melden von Sicherheitsproblemen und Fehlern (
dotnet/aspnetcore
GitHub Repository).Nicht autorisierter Client für ME-ID
Info: Die Autorisierung von Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization ist fehlgeschlagen. Diese Anforderungen wurden nicht erfüllt: DenyAnonymousAuthorizationRequirement: Erfordert einen authentifizierten Benutzer.
Anmelderückruffehler von ME-ID:
- Fehler:
unauthorized_client
- Description (Beschreibung):
AADB2C90058: The provided application is not configured to allow public clients.
So beheben Sie den Fehler
- Greifen Sie im Azure-Portal auf das Manifest der App zu.
- Legen Sie das
allowPublicClient
-Attribut aufnull
odertrue
fest.
- Fehler:
Cookies und Standortdaten
Cookies und Standortdaten können über App-Updates hinweg beibehalten werden und das Testen und die Problembehandlung beeinträchtigen. Entfernen Sie Folgendes, wenn Sie Änderungen am App-Code, Änderungen an den Benutzerkonten beim Anbieter oder Konfigurationsänderungen an Anbieter-Apps vornehmen:
- cookies für Benutzeranmeldung
- cookies für App
- Zwischengespeicherte und gespeicherte Standortdaten
Ein Ansatz, um zu verhindern, dass veraltete cookies und Standortdaten das Testen und die Problembehandlung beeinträchtigen, ist folgender:
- Browser konfigurieren
- Verwenden Sie zum Testen einen Browser, den Sie so konfigurieren können, dass alle cookies und Standortdaten jedes Mal gelöscht werden, wenn der Browser geschlossen wird.
- Stellen Sie sicher, dass der Browser manuell oder durch die IDE für alle Änderungen an der App, dem Testbenutzer oder der Anbieterkonfiguration geschlossen wird.
- Verwenden Sie einen benutzerdefinierten Befehl, um in Visual Studio einen Browser im privaten oder Inkognito-Modus zu öffnen:
- Öffnen Sie mithilfe der Schaltfläche Ausführen von Visual Studio das Dialogfeld Browserauswahl.
- Wählen Sie die Schaltfläche Hinzufügen aus.
- Geben Sie im Feld Programm den Pfad zu Ihrem Browser an. Die folgenden Pfade für ausführbare Dateien sind typische Installationspfade für Windows 10. Wenn Ihr Browser an einem anderen Speicherort installiert ist oder Sie nicht Windows 10 verwenden, geben Sie den Pfad zur ausführbaren Datei des Browsers an.
- Microsoft Edge:
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
- Google Chrome:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
- Mozilla Firefox:
C:\Program Files\Mozilla Firefox\firefox.exe
- Microsoft Edge:
- Geben Sie im Feld Argumente die Befehlszeilenoption an, die der Browser verwendet, um im privaten oder Inkognito-Modus geöffnet zu werden. Für einige Browser ist die URL der App erforderlich.
- Microsoft Edge: Verwenden Sie
-inprivate
. - Google Chrome: Verwenden Sie
--incognito --new-window {URL}
, wobei der Platzhalter{URL}
die zu öffnende URL ist (z. B.https://localhost:5001
). - Mozilla Firefox: Verwenden Sie
-private -url {URL}
, wobei der Platzhalter{URL}
die zu öffnende URL ist (z. B.https://localhost:5001
).
- Microsoft Edge: Verwenden Sie
- Geben Sie im Feld Anzeigename einen Namen ein. Beispielsweise
Firefox Auth Testing
. - Klicken Sie auf die Schaltfläche OK.
- Um zu vermeiden, dass das Browserprofil für jede einzelne Testiteration einer App ausgewählt werden muss, legen Sie das Profil mithilfe der Schaltfläche Als Standard festlegen als Standard fest.
- Stellen Sie sicher, dass der Browser von der IDE für alle Änderungen an der App, dem Testbenutzer oder der Anbieterkonfiguration geschlossen wird.
App-Upgrades
Eine funktionsfähige App kann direkt nach der Durchführung eines Upgrades für das .NET Core SDK auf dem Entwicklungscomputer oder einer Änderung der Paketversionen in der App fehlschlagen. In einigen Fällen können inkohärente Pakete eine App beschädigen, wenn größere Upgrades durchgeführt werden. Die meisten dieser Probleme können durch Befolgung der folgenden Anweisungen behoben werden:
- Löschen Sie die Caches für NuGet-Pakete auf dem lokalen System, indem Sie
dotnet nuget locals all --clear
in einer Befehlsshell ausführen. - Löschen Sie die Ordner
bin
undobj
des Projekts. - Stellen Sie das Projekt wieder her und erstellen Sie es neu.
- Löschen Sie alle Dateien im Bereitstellungsordner auf dem Server, bevor Sie die App noch mal bereitstellen.
Hinweis
Die Verwendung von Paketversionen, die mit dem Zielframework der App nicht kompatibel sind, wird nicht unterstützt. Informationen zu einem Paket finden Sie mithilfe der NuGet Gallery oder des FuGet Package Explorer.
Ausführen der Server
-App
Stellen Sie beim Testen und Beheben von Problemen bei einer gehosteten Blazor WebAssembly-Lösung sicher, dass Sie die App aus dem Server
-Projekt ausführen.
Überprüfen des Benutzers
Die folgende User
-Komponente kann direkt in Anwendungen verwendet werden oder als Grundlage für weitere Anpassungen dienen.
User.razor
:
@page "/user"
@attribute [Authorize]
@using System.Text.Json
@using System.Security.Claims
@inject IAccessTokenProvider AuthorizationService
<h1>@AuthenticatedUser?.Identity?.Name</h1>
<h2>Claims</h2>
@foreach (var claim in AuthenticatedUser?.Claims ?? Array.Empty<Claim>())
{
<p class="claim">@(claim.Type): @claim.Value</p>
}
<h2>Access token</h2>
<p id="access-token">@AccessToken?.Value</p>
<h2>Access token claims</h2>
@foreach (var claim in GetAccessTokenClaims())
{
<p>@(claim.Key): @claim.Value.ToString()</p>
}
@if (AccessToken != null)
{
<h2>Access token expires</h2>
<p>Current time: <span id="current-time">@DateTimeOffset.Now</span></p>
<p id="access-token-expires">@AccessToken.Expires</p>
<h2>Access token granted scopes (as reported by the API)</h2>
@foreach (var scope in AccessToken.GrantedScopes)
{
<p>Scope: @scope</p>
}
}
@code {
[CascadingParameter]
private Task<AuthenticationState> AuthenticationState { get; set; }
public ClaimsPrincipal AuthenticatedUser { get; set; }
public AccessToken AccessToken { get; set; }
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
var state = await AuthenticationState;
var accessTokenResult = await AuthorizationService.RequestAccessToken();
if (!accessTokenResult.TryGetToken(out var token))
{
throw new InvalidOperationException(
"Failed to provision the access token.");
}
AccessToken = token;
AuthenticatedUser = state.User;
}
protected IDictionary<string, object> GetAccessTokenClaims()
{
if (AccessToken == null)
{
return new Dictionary<string, object>();
}
// header.payload.signature
var payload = AccessToken.Value.Split(".")[1];
var base64Payload = payload.Replace('-', '+').Replace('_', '/')
.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
return JsonSerializer.Deserialize<IDictionary<string, object>>(
Convert.FromBase64String(base64Payload));
}
}
Überprüfen des Inhalts eines JSON Web Tokens (JWT)
Verwenden Sie zum Decodieren eines JSON Web Tokens (JWT) das Tool jwt.ms von Microsoft. Werte in der Benutzeroberfläche verlassen nie Ihren Browser.
Beispiel für ein codiertes JWT (für die Darstellung gekürzt):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Beispiel-JWT, das mit dem Tool für eine App decodiert wurde, das bei Azure AAD B2C authentifiziert wird:
{
"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]
Zusätzliche Ressourcen
- Konfigurieren der Herausgeberdomäne einer App
- Microsoft Entra ID-App-Manifest: identifierUris-Attribut
- Zusätzliche Sicherheitsszenarios für Blazor WebAssembly in ASP.NET Core
- Erstellen einer benutzerdefinierten Version der Authentication.MSAL-JavaScript-Bibliothek
- Nicht authentifizierte oder nicht autorisierte Web-API-Anforderungen in einer App mit einem sicheren Standardclient
- Cloudauthentifizierung mit Azure Active Directory B2C in ASP.NET Core
- Tutorial: Erstellen eines Azure Active Directory B2C-Mandanten
- Tutorial: Registrieren Sie eine Anwendung in Azure Active Directory B2C
- Dokumentation zu Microsoft Identity Platform
ASP.NET Core