Konfigurieren von ASP.NET Core Identity

ASP.NET Core Identity verwendet Standardwerte für Einstellungen wie Kennwortrichtlinie, Sperrung und konfiguration cookie. Diese Einstellungen können beim Anwendungsstart außer Kraft gesetzt werden.

-Optionen

Die -Klasse stellt die Optionen dar, die zum Konfigurieren des -Systems verwendet werden können. muss nach dem Aufruf von oder festgelegt werden.

Ansprüche

gibt die mit den in der folgenden Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RoleClaimType Ruft den für einen Rollenanspruch verwendeten Anspruchstyp ab oder legt ihn fest ClaimTypes.Role
SecurityStampClaimType Ruft den für den Sicherheitsstempelanspruch verwendeten Anspruchstyp ab oder legt ihn fest AspNet.Identity.SecurityStamp
UserIdClaimType Ruft den für den Benutzer-ID-Anspruch verwendeten Anspruchstyp ab oder legt ihn fest ClaimTypes.NameIdentifier
UserNameClaimType Ruft den für den Benutzernamenanspruch verwendeten Anspruchstyp ab oder legt ihn fest ClaimTypes.Name

Sperre

Eine Sperre wird in der PasswordSignInAsync-Methode festgelegt:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl ??= Url.Content("~/");

    ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

    if (ModelState.IsValid)
    {
        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, set lockoutOnFailure: true
        var result = await _signInManager.PasswordSignInAsync(Input.Email,
             Input.Password, Input.RememberMe,
             lockoutOnFailure: false);
        if (result.Succeeded)
        {
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }
        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
        }
        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return Page();
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

Der vorangehende Code basiert auf der Vorlage LoginIdentity.

Sperroptionen werden in festgelegt:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options =>
                                       options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default Lockout settings.
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    options.Lockout.MaxFailedAccessAttempts = 5;
    options.Lockout.AllowedForNewUsers = true;
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

Der vorhergehende Code legt die auf die Standardwerte fest.

Bei einer erfolgreichen Authentifizierung wird die fehlgeschlagene Anzahl der Zugriffsversuche zurückgesetzt und die Zeit wird zurückgesetzt.

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
AllowedForNewUsers Bestimmt, ob neue Benutzer*innen gesperrt werden können true
DefaultLockoutTimeSpan Die Dauer, für die ein*e Benutzer*in gesperrt wird, wenn eine Sperrung erfolgt. 5 Minuten
MaxFailedAccessAttempts Die Anzahl der fehlgeschlagenen access Versuche, bis ein Benutzer gesperrt ist, wenn die Sperrung aktiviert ist. 5

Kennwort

erfordert standardmäßig, dass Kennwörter jeweils mindestens einen Großbuchstaben, einen Kleinbuchstaben, eine Ziffer und ein nicht alphanumerisches Zeichen enthalten. Kennwörter müssen mindestens sechs Zeichen lang sein.

Kennwörter werden wie folgt konfiguriert:

  • in .
  • -Attribute von -Eigenschaften, wenn in die App eingebunden wird. --Eigenschaften finden Sie in den folgenden Dateien:
    • Areas/Identity/Pages/Account/Register.cshtml.cs
    • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options =>
                                options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default Password settings.
    options.Password.RequireDigit = true;
    options.Password.RequireLowercase = true;
    options.Password.RequireNonAlphanumeric = true;
    options.Password.RequireUppercase = true;
    options.Password.RequiredLength = 6;
    options.Password.RequiredUniqueChars = 1;
});

var app = builder.Build();

// Remaining code removed for brevity.

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RequireDigit Erfordert eine Zahl zwischen 0 und 9 im Kennwort true
RequiredLength Die Mindestlänge des Kennworts 6
RequireLowercase Erfordert einen Kleinbuchstaben im Kennwort true
RequireNonAlphanumeric Erfordert ein nicht alphanumerisches Zeichen im Kennwort true
RequiredUniqueChars Gilt nur für ASP.NET Core 2.0 oder höher.

Erfordert die Anzahl unterschiedlicher Zeichen im Passwort.
1
RequireUppercase Erfordert einen Großbuchstaben im Kennwort true

Anmelden

Der folgende Code legt -Einstellungen (auf Standardwerte) fest:

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default SignIn settings.
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedPhoneNumber = false;
});

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RequireConfirmedEmail Erfordert für die Anmeldung eine bestätigte E-Mail-Adresse false
RequireConfirmedPhoneNumber Erfordert für die Anmeldung eine bestätigte Telefonnummer false

Token

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG
AuthenticatorTokenProvider Ruft den ab, der zum Überprüfen von zweistufigen Anmeldungen mit einem Authentifikator verwendet wird, oder legt ihn fest
ChangeEmailTokenProvider Ruft das ab oder legt es fest, das zum Generieren von Token verwendet wird, die in Bestätigungs-E-Mails bei Änderungen der E-Mail-Adresse eingesetzt werden.
ChangePhoneNumberTokenProvider Ruft das ab oder legt es fest, das zum Generieren der Token verwendet wird, die bei Änderungen der Telefonnummer verwendet werden.
EmailConfirmationTokenProvider Ruft den zum Generieren von Token, die in Bestätigungs-E-Mails für Konten verwendet werden, verwendeten Tokenanbieter ab oder legt ihn fest
PasswordResetTokenProvider Ruft das zur Generierung von Tokens verwendete ab, die in E-Mails zum Zurücksetzen von Passwörtern genutzt werden, oder legt es fest.
ProviderMap Wird verwendet, um einen Benutzertokenanbieter zu erstellen, bei dem der Schlüssel als Anbietername verwendet wird.

Benutzer

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default User settings.
    options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    options.User.RequireUniqueEmail = false;

});

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
AllowedUserNameCharacters Zulässige Zeichen im Benutzernamen. abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail Erfordert, dass sämtliche Benutzer*innen eine eindeutige E-Mail haben. false

Konfigurieren Sie das der App in . ConfigureApplicationCookie muss nach dem Aufrufen , oder .

builder.Services.ConfigureApplicationCookie(options =>
{
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.Cookie.Name = "YourAppCookieName";
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
    options.LoginPath = "/Identity/Account/Login";
    // ReturnUrlParameter requires 
    //using Microsoft.AspNetCore.Authentication.Cookies;
    options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
    options.SlidingExpiration = true;
});

Weitere Informationen finden Sie unter .

Optionen für den Kennworthasher

ruft die Optionen für das Kennwort-Hashing ab und legt sie fest.

Option BESCHREIBUNG
CompatibilityMode Der Kompatibilitätsmodus, der bei der Hasherstellung für neue Kennwörter verwendet wird. Wird standardmäßig auf festgelegt. Das erste Byte eines Hashkennworts wird als Formatmarkierung bezeichnet und gibt die Version des Hashalgorithmus an, der zum Erstellen des Hashwerts für das Kennwort verwendet wird. Beim Überprüfen eines Kennworts anhand eines Hashs wählt die -Methode den richtigen Algorithmus basierend auf dem ersten Byte aus. Ein Client kann sich unabhängig von der verwendeten Algorithmus-Version zum Hashen des Passworts authentifizieren. Das Festlegen des Kompatibilitätsmodus wirkt sich auf das Erstellen von Hashwerten für neue Kennwörter aus.
IterationCount Die Anzahl der Iterationen, die beim Hashing von Passwörtern mithilfe von PBKDF2 verwendet werden. Dieser Wert wird nur verwendet, wenn auf festgelegt wird. Der Wert muss eine positive ganze Zahl sein und ist standardmäßig auf festgelegt.

Im folgenden Beispiel wird auf in festgelegt:

// using Microsoft.AspNetCore.Identity;

builder.Services.Configure<PasswordHasherOptions>(option =>
{
    option.IterationCount = 12000;
});

Globale Erzwingen der Authentifizierung aller Benutzer*innen

Informationen zum Anfordern der Authentifizierung für alle App-Benutzer finden Sie unter Erstellen Sie eine ASP.NET Core-App mit durch Autorisierung geschützten Benutzerdaten.

ISecurityStampValidator und „Überall abmelden“

Apps müssen auf Ereignisse reagieren, die sicherheitsrelevante Aktionen beinhalten, indem sie den der Benutzer*innen neu generieren. Beispielsweise sollte der neu generiert werden, wenn Sie einer Rolle beitreten, das Kennwort geändert wird oder andere sicherheitsrelevante Ereignisse auftreten. verwendet die -Schnittstelle, um den neu zu generieren. Die Standardimplementierung von registriert einen SecurityStampValidator bei der Hauptanwendung und bei der Zwei-Faktor-. Der Validator wird in das -Ereignis der einzelnen eingebunden, um aufzurufen und zu überprüfen, ob der Sicherheitsstempelanspruch der Benutzer*innen unverändert gegenüber dem im gespeicherten Wert ist. Der Validator ruft in regelmäßigen Abständen auf. Das Aufrufintervall stellt einen Kompromiss zwischen zu häufigen und zu seltenen Aufrufen an den Datenspeicher dar. Eine Überprüfung mit einem zu langen Zeitraum führt zu veralteten Anmeldungen. Rufen Sie auf, um zu erzwingen, dass vorhandene Cookies bei der nächsten Überprüfung invalidiert werden. Die meisten -Benutzeroberflächenkonten und Verwaltungsseiten rufen auf, nachdem sie das Kennwort geändert oder eine Anmeldung hinzugefügt haben. Apps können aufrufen, um eine Aktion zum Abmelden von allen Geräten zu implementieren.

Das Ändern des Validierungsintervalls wird im folgenden hervorgehobenen Code gezeigt:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebClaimsPrincipal.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") 
    ?? throw new InvalidOperationException("'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => 
options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

// Force Identity's security stamp to be validated every minute.
builder.Services.Configure<SecurityStampValidatorOptions>(o => 
                   o.ValidationInterval = TimeSpan.FromMinutes(1));

builder.Services.AddRazorPages();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

ASP.NET Core Identity verwendet Standardwerte für Einstellungen wie Kennwortrichtlinie, Sperrung und konfiguration cookie. Diese Einstellungen können in der -Klasse außer Kraft gesetzt werden.

-Optionen

Die -Klasse stellt die Optionen dar, die zum Konfigurieren des -Systems verwendet werden können. muss nach dem Aufruf von oder festgelegt werden.

Ansprüche

gibt die mit den in der folgenden Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RoleClaimType Ruft den für einen Rollenanspruch verwendeten Anspruchstyp ab oder legt ihn fest ClaimTypes.Role
SecurityStampClaimType Ruft den für den Sicherheitsstempelanspruch verwendeten Anspruchstyp ab oder legt ihn fest AspNet.Identity.SecurityStamp
UserIdClaimType Ruft den für den Benutzer-ID-Anspruch verwendeten Anspruchstyp ab oder legt ihn fest ClaimTypes.NameIdentifier
UserNameClaimType Ruft den für den Benutzernamenanspruch verwendeten Anspruchstyp ab oder legt ihn fest ClaimTypes.Name

Sperre

Eine Sperre wird in der PasswordSignInAsync-Methode festgelegt:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");

    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(Input.Email, 
            Input.Password, Input.RememberMe, 
            lockoutOnFailure: false);
        if (result.Succeeded)
        {
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }
        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl,
                Input.RememberMe });
        }
        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return Page();
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

Der obige Code basiert auf der -Vorlage.

Sperroptionen werden in festgelegt:

services.Configure<IdentityOptions>(options =>
{
    // Default Lockout settings.
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    options.Lockout.MaxFailedAccessAttempts = 5;
    options.Lockout.AllowedForNewUsers = true;
});

Der vorhergehende Code legt die auf die Standardwerte fest.

Bei einer erfolgreichen Authentifizierung wird die Anzahl der fehlgeschlagenen Zugriffsversuche zurückgesetzt, und der Timer wird zurückgesetzt.

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
AllowedForNewUsers Bestimmt, ob neue Benutzer*innen gesperrt werden können true
DefaultLockoutTimeSpan Die Dauer, für die ein*e Benutzer*in gesperrt wird, wenn eine Sperrung erfolgt. 5 Minuten
MaxFailedAccessAttempts Die Anzahl der fehlgeschlagenen access Versuche, bis ein Benutzer gesperrt ist, wenn die Sperrung aktiviert ist. 5

Kennwort

erfordert standardmäßig, dass Kennwörter jeweils mindestens einen Großbuchstaben, einen Kleinbuchstaben, eine Ziffer und ein nicht alphanumerisches Zeichen enthalten. Kennwörter müssen mindestens sechs Zeichen lang sein.

Kennwörter werden wie folgt konfiguriert:

  • in .
  • -Attribute von -Eigenschaften, wenn in die App eingebunden wird. --Eigenschaften finden Sie in den folgenden Dateien:
    • Areas/Identity/Pages/Account/Register.cshtml.cs
    • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
services.Configure<IdentityOptions>(options =>
{
    // Default Password settings.
    options.Password.RequireDigit = true;
    options.Password.RequireLowercase = true;
    options.Password.RequireNonAlphanumeric = true;
    options.Password.RequireUppercase = true;
    options.Password.RequiredLength = 6;
    options.Password.RequiredUniqueChars = 1;
});

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RequireDigit Erfordert eine Zahl zwischen 0 und 9 im Kennwort true
RequiredLength Die Mindestlänge des Kennworts 6
RequireLowercase Erfordert einen Kleinbuchstaben im Kennwort true
RequireNonAlphanumeric Erfordert ein nicht alphanumerisches Zeichen im Kennwort true
RequiredUniqueChars Gilt nur für ASP.NET Core 2.0 oder höher.

Erfordert die Anzahl unterschiedlicher Zeichen im Passwort.
1
RequireUppercase Erfordert einen Großbuchstaben im Kennwort true

Anmelden

Der folgende Code legt -Einstellungen (auf Standardwerte) fest:

services.Configure<IdentityOptions>(options =>
{
    // Default SignIn settings.
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedPhoneNumber = false;
});

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RequireConfirmedEmail Erfordert für die Anmeldung eine bestätigte E-Mail-Adresse false
RequireConfirmedPhoneNumber Erfordert für die Anmeldung eine bestätigte Telefonnummer false

Token

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG
AuthenticatorTokenProvider Ruft den ab, der zum Überprüfen von zweistufigen Anmeldungen mit einem Authentifikator verwendet wird, oder legt ihn fest
ChangeEmailTokenProvider Ruft das ab oder legt es fest, das zum Generieren von Token verwendet wird, die in Bestätigungs-E-Mails bei Änderungen der E-Mail-Adresse eingesetzt werden.
ChangePhoneNumberTokenProvider Ruft das ab oder legt es fest, das zum Generieren der Token verwendet wird, die bei Änderungen der Telefonnummer verwendet werden.
EmailConfirmationTokenProvider Ruft den zum Generieren von Token, die in Bestätigungs-E-Mails für Konten verwendet werden, verwendeten Tokenanbieter ab oder legt ihn fest
PasswordResetTokenProvider Ruft das zur Generierung von Tokens verwendete ab, die in E-Mails zum Zurücksetzen von Passwörtern genutzt werden, oder legt es fest.
ProviderMap Wird verwendet, um einen Benutzertokenanbieter zu erstellen, bei dem der Schlüssel als Anbietername verwendet wird.

Benutzer

services.Configure<IdentityOptions>(options =>
{
    // Default User settings.
    options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    options.User.RequireUniqueEmail = false;

});

gibt die mit den in der Tabelle beschriebenen Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
AllowedUserNameCharacters Zulässige Zeichen im Benutzernamen. abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail Erfordert, dass sämtliche Benutzer*innen eine eindeutige E-Mail haben. false

Konfigurieren Sie das der App in . ConfigureApplicationCookie muss nach dem Aufrufen , oder .

services.ConfigureApplicationCookie(options =>
{
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.Cookie.Name = "YourAppCookieName";
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
    options.LoginPath = "/Identity/Account/Login";
    // ReturnUrlParameter requires 
    //using Microsoft.AspNetCore.Authentication.Cookies;
    options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
    options.SlidingExpiration = true;
});

Weitere Informationen finden Sie unter .

Optionen für den Kennworthasher

ruft die Optionen für das Kennwort-Hashing ab und legt sie fest.

Option BESCHREIBUNG
CompatibilityMode Der Kompatibilitätsmodus, der bei der Hasherstellung für neue Kennwörter verwendet wird. Wird standardmäßig auf festgelegt. Das erste Byte eines Hashkennworts wird als Formatmarkierung bezeichnet und gibt die Version des Hashalgorithmus an, der zum Erstellen des Hashwerts für das Kennwort verwendet wird. Beim Überprüfen eines Kennworts anhand eines Hashs wählt die -Methode den richtigen Algorithmus basierend auf dem ersten Byte aus. Ein Client kann sich unabhängig von der verwendeten Algorithmus-Version zum Hashen des Passworts authentifizieren. Das Festlegen des Kompatibilitätsmodus wirkt sich auf das Erstellen von Hashwerten für neue Kennwörter aus.
IterationCount Die Anzahl der Iterationen, die beim Hashing von Passwörtern mithilfe von PBKDF2 verwendet werden. Dieser Wert wird nur verwendet, wenn auf festgelegt wird. Der Wert muss eine positive ganze Zahl sein und ist standardmäßig auf festgelegt.

Im folgenden Beispiel wird auf in festgelegt:

// using Microsoft.AspNetCore.Identity;

services.Configure<PasswordHasherOptions>(option =>
{
    option.IterationCount = 12000;
});

Globale Erzwingen der Authentifizierung aller Benutzer*innen

Informationen zum Anfordern der Authentifizierung für alle App-Benutzer finden Sie unter Erstellen Sie eine ASP.NET Core-App mit durch Autorisierung geschützten Benutzerdaten.