Aracılığıyla paylaş


ASP.NET Core'ı yapılandırma Identity

ASP.NET Core Identity parola ilkesi, kilitleme ve cookie yapılandırma gibi ayarlar için varsayılan değerleri kullanır. Bu ayarlar uygulama başlangıcında geçersiz kılınabilir.

Identity Seçenekler

sınıfı, IdentityOptions sistemi yapılandırmak Identity için kullanılabilecek seçenekleri temsil eder. IdentityOptionsveya AddDefaultIdentityçağrıldıktan AddIdentity sonra ayarlanmalıdır.

Iddia Identity

IdentityOptions.ClaimsIdentityClaimsIdentityOptions, aşağıdaki tabloda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
RoleClaimType Rol talebi için kullanılan talep türünü alır veya ayarlar. ClaimTypes.Role
SecurityStampClaimType Güvenlik damgası talebi için kullanılan talep türünü alır veya ayarlar. AspNet.Identity.SecurityStamp
UserIdClaimType Kullanıcı tanımlayıcı talebi için kullanılan talep türünü alır veya ayarlar. ClaimTypes.NameIdentifier
UserNameClaimType Kullanıcı adı talebi için kullanılan talep türünü alır veya ayarlar. ClaimTypes.Name

Lokavt

PasswordSignInAsync yönteminde kilitleme ayarlanır:

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

Yukarıdaki kod şablonu temel LoginIdentity alır.

Kilitleme seçenekleri içinde Program.csayarlanır:

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();

Yukarıdaki kod, varsayılan değerlerle öğesini IdentityOptions LockoutOptions ayarlar.

Başarılı bir kimlik doğrulaması başarısız olan erişim denemelerinin sayısını sıfırlar ve saati sıfırlar.

IdentityOptions.LockoutLockoutOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
AllowedForNewUsers Yeni bir kullanıcının kilitlenip kilitlenebileceğini belirler. true
DefaultLockoutTimeSpan Kilitleme gerçekleştiğinde kullanıcının kilitlenme süresi. 5 dakika
MaxFailedAccessAttempts Kilitleme etkinse, bir kullanıcı kilitlenene kadar başarısız olan erişim denemelerinin sayısı. 5

Parola

Varsayılan olarak, Identity parolaların büyük harf karakter, küçük harf karakter, basamak ve alfasayısal olmayan bir karakter içermesini gerektirir. Parolalar en az altı karakter uzunluğunda olmalıdır.

Parolalar şu şekilde yapılandırılır:

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 tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
RequireDigit Parolada 0-9 arasında bir sayı gerektirir. true
RequiredLength Parolanın en düşük uzunluğu. 6
RequireLowercase Parolada küçük harf karakter gerektirir. true
RequireNonAlphanumeric Parolada alfasayısal olmayan bir karakter gerektirir. true
RequiredUniqueChars Yalnızca ASP.NET Core 2.0 veya üzeri için geçerlidir.

Paroladaki ayrı karakter sayısını gerektirir.
1
RequireUppercase Parolada büyük harf karakter gerektirir. true

Oturum açma

Aşağıdaki kod ayarları (varsayılan değerlere) ayarlar SignIn :

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

IdentityOptions.SignInSignInOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
RequireConfirmedEmail Oturum açmak için onaylanmış bir e-posta gerekir. false
RequireConfirmedPhoneNumber Oturum açmak için onaylanmış bir telefon numarası gerekir. false

Belirteçler

IdentityOptions.TokensTokenOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama
AuthenticatorTokenProvider İki öğeli oturum açmaları bir kimlik doğrulayıcıyla doğrulamak için kullanılan öğesini alır veya ayarlar AuthenticatorTokenProvider .
ChangeEmailTokenProvider E-posta değişikliği onay e-postalarında kullanılan belirteçleri oluşturmak için kullanılan öğesini alır veya ayarlar ChangeEmailTokenProvider .
ChangePhoneNumberTokenProvider Telefon numaralarını değiştirirken kullanılan belirteçleri oluşturmak için kullanılan öğesini ChangePhoneNumberTokenProvider alır veya ayarlar.
EmailConfirmationTokenProvider Hesap onay e-postalarında kullanılan belirteçleri oluşturmak için kullanılan belirteç sağlayıcısını alır veya ayarlar.
PasswordResetTokenProvider Parola sıfırlama e-postalarında kullanılan belirteçleri oluşturmak için kullanılan öğesini alır veya ayarlar IUserTwoFactorTokenProvider<TUser> .
ProviderMap Sağlayıcı adı olarak kullanılan anahtarla bir Kullanıcı Belirteci Sağlayıcısı oluşturmak için kullanılır.

User

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

});

IdentityOptions.UserUserOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
AllowedUserNameCharacters Kullanıcı adı içinde izin verilen karakterler. abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail Her kullanıcının benzersiz bir e-postası olmasını gerektirir. false

uygulamasındaki uygulamaları cookie Program.csyapılandırın. Veya çağrıldıktan AddIdentity AddDefaultIdentitysonra ConfigureApplicationCookie çağrılmalıdır.

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

Daha fazla bilgi için bkz. CookieAuthenticationOptions.

Parola Hasher seçenekleri

PasswordHasherOptions parola karması seçeneklerini alır ve ayarlar.

Seçenek Açıklama
CompatibilityMode Yeni parolalar karma olarak kullanılırken kullanılan uyumluluk modu. varsayılan değeridir IdentityV3. Biçim işaretçisi olarak adlandırılan karma parolanın ilk baytı, parolayı karma olarak ayarlamak için kullanılan karma algoritmasının sürümünü belirtir. Karma bir parolayı doğrularken yöntemi ilk VerifyHashedPassword bayt temelinde doğru algoritmayı seçer. İstemci, parolayı karma olarak kullanmak için algoritmanın hangi sürümünün kullanıldığına bakılmaksızın kimlik doğrulaması yapabilir. Uyumluluk modunun ayarlanması yeni parolaların karması etkiler.
IterationCount PBKDF2 kullanılarak parola karmaları oluşturulurken kullanılan yineleme sayısı. Bu değer yalnızca olarak ayarlandığında IdentityV3kullanılırCompatibilityMode. Değer pozitif bir tamsayı olmalı ve varsayılan olarak 100000olmalıdır.

Aşağıdaki örnekte, IterationCount içinde olarak 12000 Program.csayarlanır:

// using Microsoft.AspNetCore.Identity;

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

Genel olarak tüm kullanıcıların kimliğinin doğrulanması gerekir

Genel olarak tüm kullanıcıların kimliğinin doğrulanmış olmasını gerektirme hakkında bilgi için bkz . Kimliği doğrulanmış kullanıcılar gerektirme.

ISecurityStampValidator ve SignOut her yerde

Uygulamaların, kullanıcıları ClaimsPrincipalyeniden oluşturma yoluyla güvenlikle ilgili hassas eylemler içeren olaylara tepki vermeleri gerekir. Örneğin, ClaimsPrincipal bir role katılırken, parola değiştirilirken veya güvenlikle ilgili diğer hassas olaylar sırasında yeniden oluşturulmalıdır. Identity arabirimini ISecurityStampValidator kullanarak yeniden ClaimsPrincipaloluşturur. varsayılan uygulamasıIdentity, ana uygulama cookieve iki öğeli cookieile bir SecurityStampValidator kaydeder. Doğrulayıcı, kullanıcının güvenlik damgası talebi ile içinde depolananların değişmediğini doğrulamak için çağrılacak Identity her cookie birinin olayına cookietakılırOnValidatePrincipal. Doğrulayıcı, düzenli aralıklarla çağrısında bulunur. Çağrı aralığı, veri deposuna çok sık ve yeterince sık isabet etmemesi arasında bir dengedir. Uzun bir aralıkla denetlenerek eski talepler elde edilir. Mevcut tanımlama bilgilerinin bir sonraki denetlenişinde geçersiz kılınmaya zorlamak için çağrısı userManager.UpdateSecurityStampAsync(user). Kullanıcı arabirimi hesabının ve yönetme sayfalarının Identity çoğu, parolayı değiştirdikten veya oturum açma bilgisi ekledikten sonra arar userManager.UpdateSecurityStampAsync(user) . Uygulamalar, her yerde oturumu kapatma eylemi uygulamak için çağrısı userManager.UpdateSecurityStampAsync(user) yapabilir.

Doğrulama aralığının değiştirilmesi aşağıdaki vurgulanmış kodda gösterilir:

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 parola ilkesi, kilitleme ve cookie yapılandırma gibi ayarlar için varsayılan değerleri kullanır. Bu ayarlar sınıfta Startup geçersiz kılınabilir.

Identity Seçenekler

sınıfı, IdentityOptions sistemi yapılandırmak Identity için kullanılabilecek seçenekleri temsil eder. IdentityOptionsveya AddDefaultIdentityçağrıldıktan AddIdentity sonra ayarlanmalıdır.

Iddia Identity

IdentityOptions.ClaimsIdentityClaimsIdentityOptions, aşağıdaki tabloda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
RoleClaimType Rol talebi için kullanılan talep türünü alır veya ayarlar. ClaimTypes.Role
SecurityStampClaimType Güvenlik damgası talebi için kullanılan talep türünü alır veya ayarlar. AspNet.Identity.SecurityStamp
UserIdClaimType Kullanıcı tanımlayıcı talebi için kullanılan talep türünü alır veya ayarlar. ClaimTypes.NameIdentifier
UserNameClaimType Kullanıcı adı talebi için kullanılan talep türünü alır veya ayarlar. ClaimTypes.Name

Lokavt

PasswordSignInAsync yönteminde kilitleme ayarlanır:

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

Yukarıdaki kod şablonu temel LoginIdentity alır.

Kilitleme seçenekleri içinde StartUp.ConfigureServicesayarlanır:

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

Yukarıdaki kod, varsayılan değerlerle öğesini IdentityOptions LockoutOptions ayarlar.

Başarılı bir kimlik doğrulaması başarısız olan erişim denemelerinin sayısını sıfırlar ve saati sıfırlar.

IdentityOptions.LockoutLockoutOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
AllowedForNewUsers Yeni bir kullanıcının kilitlenip kilitlenebileceğini belirler. true
DefaultLockoutTimeSpan Kilitleme gerçekleştiğinde kullanıcının kilitlenme süresi. 5 dakika
MaxFailedAccessAttempts Kilitleme etkinse, bir kullanıcı kilitlenene kadar başarısız olan erişim denemelerinin sayısı. 5

Parola

Varsayılan olarak, Identity parolaların büyük harf karakter, küçük harf karakter, basamak ve alfasayısal olmayan bir karakter içermesini gerektirir. Parolalar en az altı karakter uzunluğunda olmalıdır.

Parolalar şu şekilde yapılandırılır:

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 tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
RequireDigit Parolada 0-9 arasında bir sayı gerektirir. true
RequiredLength Parolanın en düşük uzunluğu. 6
RequireLowercase Parolada küçük harf karakter gerektirir. true
RequireNonAlphanumeric Parolada alfasayısal olmayan bir karakter gerektirir. true
RequiredUniqueChars Yalnızca ASP.NET Core 2.0 veya üzeri için geçerlidir.

Paroladaki ayrı karakter sayısını gerektirir.
1
RequireUppercase Parolada büyük harf karakter gerektirir. true

Oturum açma

Aşağıdaki kod ayarları (varsayılan değerlere) ayarlar SignIn :

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

IdentityOptions.SignInSignInOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
RequireConfirmedEmail Oturum açmak için onaylanmış bir e-posta gerekir. false
RequireConfirmedPhoneNumber Oturum açmak için onaylanmış bir telefon numarası gerekir. false

Belirteçler

IdentityOptions.TokensTokenOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama
AuthenticatorTokenProvider İki öğeli oturum açmaları bir kimlik doğrulayıcıyla doğrulamak için kullanılan öğesini alır veya ayarlar AuthenticatorTokenProvider .
ChangeEmailTokenProvider E-posta değişikliği onay e-postalarında kullanılan belirteçleri oluşturmak için kullanılan öğesini alır veya ayarlar ChangeEmailTokenProvider .
ChangePhoneNumberTokenProvider Telefon numaralarını değiştirirken kullanılan belirteçleri oluşturmak için kullanılan öğesini ChangePhoneNumberTokenProvider alır veya ayarlar.
EmailConfirmationTokenProvider Hesap onay e-postalarında kullanılan belirteçleri oluşturmak için kullanılan belirteç sağlayıcısını alır veya ayarlar.
PasswordResetTokenProvider Parola sıfırlama e-postalarında kullanılan belirteçleri oluşturmak için kullanılan öğesini alır veya ayarlar IUserTwoFactorTokenProvider<TUser> .
ProviderMap Sağlayıcı adı olarak kullanılan anahtarla bir Kullanıcı Belirteci Sağlayıcısı oluşturmak için kullanılır.

User

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

});

IdentityOptions.UserUserOptions tablosunda gösterilen özelliklerle belirtir.

Özellik Açıklama Varsayılan
AllowedUserNameCharacters Kullanıcı adı içinde izin verilen karakterler. abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail Her kullanıcının benzersiz bir e-postası olmasını gerektirir. false

uygulamasındaki uygulamaları cookie Startup.ConfigureServicesyapılandırın. Veya çağrıldıktan AddIdentity AddDefaultIdentitysonra ConfigureApplicationCookie çağrılmalıdır.

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

Daha fazla bilgi için bkz. CookieAuthenticationOptions.

Parola Hasher seçenekleri

PasswordHasherOptions parola karması seçeneklerini alır ve ayarlar.

Seçenek Açıklama
CompatibilityMode Yeni parolalar karma olarak kullanılırken kullanılan uyumluluk modu. varsayılan değeridir IdentityV3. Biçim işaretçisi olarak adlandırılan karma parolanın ilk baytı, parolayı karma olarak ayarlamak için kullanılan karma algoritmasının sürümünü belirtir. Karma bir parolayı doğrularken yöntemi ilk VerifyHashedPassword bayt temelinde doğru algoritmayı seçer. İstemci, parolayı karma olarak kullanmak için algoritmanın hangi sürümünün kullanıldığına bakılmaksızın kimlik doğrulaması yapabilir. Uyumluluk modunun ayarlanması yeni parolaların karması etkiler.
IterationCount PBKDF2 kullanılarak parola karmaları oluşturulurken kullanılan yineleme sayısı. Bu değer yalnızca olarak ayarlandığında IdentityV3kullanılırCompatibilityMode. Değer pozitif bir tamsayı olmalı ve varsayılan olarak 10000olmalıdır.

Aşağıdaki örnekte, IterationCount içinde olarak 12000 Startup.ConfigureServicesayarlanır:

// using Microsoft.AspNetCore.Identity;

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

Genel olarak tüm kullanıcıların kimliğinin doğrulanması gerekir

Genel olarak tüm kullanıcıların kimliğinin doğrulanmış olmasını gerektirme hakkında bilgi için bkz . Kimliği doğrulanmış kullanıcılar gerektirme.