Mengonfigurasi ASP.NET Core Identity
ASP.NET Core Identity menggunakan nilai default untuk pengaturan seperti kebijakan kata sandi, penguncian, dan cookie konfigurasi. Pengaturan ini dapat ditimpa saat pengaktifan aplikasi.
Opsi Identity
Kelas IdentityOptions mewakili opsi yang dapat digunakan untuk mengonfigurasi Identity sistem. IdentityOptions harus diatur setelah memanggil AddIdentity atau AddDefaultIdentity.
Klaim Identity
IdentityOptions.ClaimsIdentityClaimsIdentityOptions menentukan dengan properti yang diperlihatkan dalam tabel berikut.
Properti | Deskripsi | Default |
---|---|---|
RoleClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim peran. | ClaimTypes.Role |
SecurityStampClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim stempel keamanan. | AspNet.Identity.SecurityStamp |
UserIdClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim pengidentifikasi pengguna. | ClaimTypes.NameIdentifier |
UserNameClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim nama pengguna. | ClaimTypes.Name |
Dikunci
Penguncian diatur dalam metode PasswordSignInAsync :
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();
}
Kode sebelumnya didasarkan pada Login
Identity templat.
Opsi penguncian diatur dalam Program.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 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();
Kode sebelumnya mengatur IdentityOptionsLockoutOptions dengan nilai default.
Autentikasi yang berhasil mengatur ulang jumlah upaya akses yang gagal dan mengatur ulang jam.
IdentityOptions.LockoutLockoutOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
AllowedForNewUsers | Menentukan apakah pengguna baru dapat dikunci. | true |
DefaultLockoutTimeSpan | Jumlah waktu pengguna dikunci saat penguncian terjadi. | 5 menit |
MaxFailedAccessAttempts | Jumlah upaya akses yang gagal hingga pengguna dikunci, jika penguncian diaktifkan. | 5 |
Kata sandi
Secara default, Identity mengharuskan kata sandi berisi karakter huruf besar, karakter huruf kecil, digit, dan karakter non-alfanumerik. Kata sandi harus panjangnya minimal enam karakter.
Kata sandi dikonfigurasi dengan:
- PasswordOptions di
Program.cs
. [StringLength]
Password
atribut properti jika Identity di-scaffold ke dalam aplikasi.InputModel
Password
properti ditemukan dalam file berikut: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.
IdentityOptions.PasswordPasswordOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
RequireDigit | Memerlukan angka antara 0-9 dalam kata sandi. | true |
RequiredLength | Panjang minimum kata sandi. | 6 |
RequireLowercase | Memerlukan karakter huruf kecil dalam kata sandi. | true |
RequireNonAlphanumeric | Memerlukan karakter non-alfanumerik dalam kata sandi. | true |
RequiredUniqueChars | Hanya berlaku untuk ASP.NET Core 2.0 atau yang lebih baru. Memerlukan jumlah karakter yang berbeda dalam kata sandi. |
1 |
RequireUppercase | Memerlukan karakter huruf besar dalam kata sandi. | true |
Masuk
Kode berikut mengatur SignIn
pengaturan (ke nilai default):
builder.Services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
IdentityOptions.SignInSignInOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
RequireConfirmedEmail | Memerlukan email yang dikonfirmasi untuk masuk. | false |
RequireConfirmedPhoneNumber | Memerlukan nomor telepon yang dikonfirmasi untuk masuk. | false |
Token
IdentityOptions.TokensTokenOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi |
---|---|
AuthenticatorTokenProvider | Mendapatkan atau mengatur yang AuthenticatorTokenProvider digunakan untuk memvalidasi masuk dua faktor dengan pengautentikasi. |
ChangeEmailTokenProvider | Mendapatkan atau mengatur yang ChangeEmailTokenProvider digunakan untuk menghasilkan token yang digunakan dalam email konfirmasi perubahan email. |
ChangePhoneNumberTokenProvider | Mendapatkan atau mengatur yang ChangePhoneNumberTokenProvider digunakan untuk menghasilkan token yang digunakan saat mengubah nomor telepon. |
EmailConfirmationTokenProvider | Mendapatkan atau mengatur penyedia token yang digunakan untuk menghasilkan token yang digunakan dalam email konfirmasi akun. |
PasswordResetTokenProvider | Mendapatkan atau mengatur yang IUserTwoFactorTokenProvider<TUser> digunakan untuk menghasilkan token yang digunakan dalam email reset kata sandi. |
ProviderMap | Digunakan untuk membuat Penyedia Token Pengguna dengan kunci yang digunakan sebagai nama penyedia. |
Pengguna
builder.Services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
IdentityOptions.UserUserOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
AllowedUserNameCharacters | Karakter yang diizinkan dalam nama pengguna. | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
RequireUniqueEmail | Mengharuskan setiap pengguna untuk memiliki email unik. | false |
Pengaturan Cookie
Konfigurasikan aplikasi cookie di Program.cs
. KonfigurasikanApplicationCookie harus dipanggil setelah memanggil AddIdentity
atau AddDefaultIdentity
.
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;
});
Untuk informasi selengkapnya, lihat CookieAuthenticationOptions .
Opsi Hasher Kata Sandi
PasswordHasherOptions mendapatkan dan mengatur opsi untuk hashing kata sandi.
Opsi | Deskripsi |
---|---|
CompatibilityMode | Mode kompatibilitas yang digunakan saat hash kata sandi baru. Default ke IdentityV3. Byte pertama dari kata sandi yang di-hash, yang disebut penanda format, menentukan versi algoritma hashing yang digunakan untuk hash kata sandi. Saat memverifikasi kata sandi terhadap hash, VerifyHashedPassword metode memilih algoritma yang benar berdasarkan byte pertama. Klien dapat mengautentikasi terlepas dari versi algoritma mana yang digunakan untuk hash kata sandi. Mengatur mode kompatibilitas memengaruhi hash kata sandi baru. |
IterationCount | Jumlah iterasi yang digunakan saat hash kata sandi menggunakan PBKDF2. Nilai ini hanya digunakan ketika CompatibilityMode diatur ke IdentityV3. Nilai harus berupa bilangan bulat positif dan default ke 100000 . |
Dalam contoh berikut, IterationCount diatur ke 12000
dalam Program.cs
:
// using Microsoft.AspNetCore.Identity;
builder.Services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});
Secara global mengharuskan semua pengguna diautentikasi
Untuk informasi tentang cara mengharuskan semua pengguna diautentikasi secara global, lihat Memerlukan pengguna yang diautentikasi.
ISecurityStampValidator dan SignOut di mana saja
Aplikasi perlu bereaksi terhadap peristiwa yang melibatkan tindakan sensitif keamanan dengan meregenerasi pengguna ClaimsPrincipal. Misalnya, ClaimsPrincipal
harus diregenerasi saat bergabung dengan peran, mengubah kata sandi, atau peristiwa sensitif keamanan lainnya. IdentityISecurityStampValidator menggunakan antarmuka untuk meregenerasi ClaimsPrincipal
. Implementasi default mendaftarkan SecurityStampValidator dengan aplikasi cookie utama dan dua faktor cookie.Identity Validator terhubung ke dalam OnValidatePrincipal peristiwa masing-masing cookie untuk memanggil Identity untuk memverifikasi bahwa klaim stempel keamanan pengguna tidak berubah dari apa yang disimpan di cookie. Validator memanggil secara berkala. Interval panggilan adalah tradeoff antara memukul datastore terlalu sering dan tidak cukup sering. Memeriksa dengan interval panjang menghasilkan klaim kedaluarsa. Panggil userManager.UpdateSecurityStampAsync(user)
untuk memaksa s yang cookieada tidak valid saat berikutnya mereka diperiksa. Sebagian Identity besar akun UI dan mengelola panggilan userManager.UpdateSecurityStampAsync(user)
halaman setelah mengubah kata sandi atau menambahkan login. Aplikasi dapat memanggil userManager.UpdateSecurityStampAsync(user)
untuk menerapkan tindakan keluar di mana saja.
Mengubah interval validasi diperlihatkan dalam kode yang disorot berikut:
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 menggunakan nilai default untuk pengaturan seperti kebijakan kata sandi, penguncian, dan cookie konfigurasi. Pengaturan ini dapat ditimpa di Startup
kelas .
Opsi Identity
Kelas IdentityOptions mewakili opsi yang dapat digunakan untuk mengonfigurasi Identity sistem. IdentityOptions
harus diatur setelah memanggil AddIdentity
atau AddDefaultIdentity
.
Klaim Identity
IdentityOptions.ClaimsIdentityClaimsIdentityOptions menentukan dengan properti yang diperlihatkan dalam tabel berikut.
Properti | Deskripsi | Default |
---|---|---|
RoleClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim peran. | ClaimTypes.Role |
SecurityStampClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim stempel keamanan. | AspNet.Identity.SecurityStamp |
UserIdClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim pengidentifikasi pengguna. | ClaimTypes.NameIdentifier |
UserNameClaimType | Mendapatkan atau mengatur jenis klaim yang digunakan untuk klaim nama pengguna. | ClaimTypes.Name |
Dikunci
Penguncian diatur dalam metode PasswordSignInAsync :
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();
}
Kode sebelumnya didasarkan pada Login
Identity templat.
Opsi penguncian diatur dalam StartUp.ConfigureServices
:
services.Configure<IdentityOptions>(options =>
{
// Default Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
});
Kode sebelumnya mengatur IdentityOptionsLockoutOptions dengan nilai default.
Autentikasi yang berhasil mengatur ulang jumlah upaya akses yang gagal dan mengatur ulang jam.
IdentityOptions.LockoutLockoutOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
AllowedForNewUsers | Menentukan apakah pengguna baru dapat dikunci. | true |
DefaultLockoutTimeSpan | Jumlah waktu pengguna dikunci saat penguncian terjadi. | 5 menit |
MaxFailedAccessAttempts | Jumlah upaya akses yang gagal hingga pengguna dikunci, jika penguncian diaktifkan. | 5 |
Kata sandi
Secara default, Identity mengharuskan kata sandi berisi karakter huruf besar, karakter huruf kecil, digit, dan karakter non-alfanumerik. Kata sandi harus panjangnya minimal enam karakter.
Kata sandi dikonfigurasi dengan:
- PasswordOptions di
Startup.ConfigureServices
. [StringLength]
Password
atribut properti jika Identity di-scaffold ke dalam aplikasi.InputModel
Password
properti ditemukan dalam file berikut: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;
});
IdentityOptions.PasswordPasswordOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
RequireDigit | Memerlukan angka antara 0-9 dalam kata sandi. | true |
RequiredLength | Panjang minimum kata sandi. | 6 |
RequireLowercase | Memerlukan karakter huruf kecil dalam kata sandi. | true |
RequireNonAlphanumeric | Memerlukan karakter non-alfanumerik dalam kata sandi. | true |
RequiredUniqueChars | Hanya berlaku untuk ASP.NET Core 2.0 atau yang lebih baru. Memerlukan jumlah karakter yang berbeda dalam kata sandi. |
1 |
RequireUppercase | Memerlukan karakter huruf besar dalam kata sandi. | true |
Masuk
Kode berikut mengatur SignIn
pengaturan (ke nilai default):
services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
IdentityOptions.SignInSignInOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
RequireConfirmedEmail | Memerlukan email yang dikonfirmasi untuk masuk. | false |
RequireConfirmedPhoneNumber | Memerlukan nomor telepon yang dikonfirmasi untuk masuk. | false |
Token
IdentityOptions.TokensTokenOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi |
---|---|
AuthenticatorTokenProvider | Mendapatkan atau mengatur yang AuthenticatorTokenProvider digunakan untuk memvalidasi masuk dua faktor dengan pengautentikasi. |
ChangeEmailTokenProvider | Mendapatkan atau mengatur yang ChangeEmailTokenProvider digunakan untuk menghasilkan token yang digunakan dalam email konfirmasi perubahan email. |
ChangePhoneNumberTokenProvider | Mendapatkan atau mengatur yang ChangePhoneNumberTokenProvider digunakan untuk menghasilkan token yang digunakan saat mengubah nomor telepon. |
EmailConfirmationTokenProvider | Mendapatkan atau mengatur penyedia token yang digunakan untuk menghasilkan token yang digunakan dalam email konfirmasi akun. |
PasswordResetTokenProvider | Mendapatkan atau mengatur yang IUserTwoFactorTokenProvider<TUser> digunakan untuk menghasilkan token yang digunakan dalam email reset kata sandi. |
ProviderMap | Digunakan untuk membuat Penyedia Token Pengguna dengan kunci yang digunakan sebagai nama penyedia. |
Pengguna
services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
IdentityOptions.UserUserOptions menentukan dengan properti yang diperlihatkan dalam tabel.
Properti | Deskripsi | Default |
---|---|---|
AllowedUserNameCharacters | Karakter yang diizinkan dalam nama pengguna. | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
RequireUniqueEmail | Mengharuskan setiap pengguna untuk memiliki email unik. | false |
Pengaturan Cookie
Konfigurasikan aplikasi cookie di Startup.ConfigureServices
. KonfigurasikanApplicationCookie harus dipanggil setelah memanggil AddIdentity
atau AddDefaultIdentity
.
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;
});
Untuk informasi selengkapnya, lihat CookieAuthenticationOptions .
Opsi Hasher Kata Sandi
PasswordHasherOptions mendapatkan dan mengatur opsi untuk hashing kata sandi.
Opsi | Deskripsi |
---|---|
CompatibilityMode | Mode kompatibilitas yang digunakan saat hash kata sandi baru. Default ke IdentityV3. Byte pertama dari kata sandi yang di-hash, yang disebut penanda format, menentukan versi algoritma hashing yang digunakan untuk hash kata sandi. Saat memverifikasi kata sandi terhadap hash, VerifyHashedPassword metode memilih algoritma yang benar berdasarkan byte pertama. Klien dapat mengautentikasi terlepas dari versi algoritma mana yang digunakan untuk hash kata sandi. Mengatur mode kompatibilitas memengaruhi hash kata sandi baru. |
IterationCount | Jumlah iterasi yang digunakan saat hash kata sandi menggunakan PBKDF2. Nilai ini hanya digunakan ketika CompatibilityMode diatur ke IdentityV3. Nilai harus berupa bilangan bulat positif dan default ke 10000 . |
Dalam contoh berikut, IterationCount diatur ke 12000
dalam Startup.ConfigureServices
:
// using Microsoft.AspNetCore.Identity;
services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});
Secara global mengharuskan semua pengguna diautentikasi
Untuk informasi tentang cara mengharuskan semua pengguna diautentikasi secara global, lihat Memerlukan pengguna yang diautentikasi.
ASP.NET Core
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk