ASP.NET Core olmadan kimlik doğrulamayı kullanma cookieIdentity
Gönderen Rick Anderson
ASP.NET Core Identity , oturum açma bilgileri oluşturmaya ve sürdürmeye yönelik eksiksiz ve tam özellikli bir kimlik doğrulama sağlayıcısıdır. Ancak, ASP.NET Core Identity içermeyen tabanlı bir cookiekimlik doğrulama sağlayıcısı kullanılabilir. Daha fazla bilgi için bkz. ASP.NET Core'a Identitygiriş.
Örnek kodu görüntüleme veya indirme (indirme)
Örnek uygulamada gösterim amacıyla, maria Rodriguez adlı varsayımsal kullanıcının kullanıcı hesabı uygulamaya sabit kodlanmıştır. Kullanıcıda oturum açmak için E-posta adresini maria.rodriguez@contoso.com
ve herhangi bir parolayı kullanın. Kullanıcının kimliği dosyasındaki AuthenticateUser
yönteminde Pages/Account/Login.cshtml.cs
doğrulanır. Gerçek dünyadaki bir örnekte, kullanıcının kimliği bir veri deposunda doğrulanır.
Kimlik doğrulaması ekleme cookie
- ve AddCookie yöntemleriyle AddAuthentication Kimlik Doğrulama Ara Yazılımı hizmetlerini ekleyin.
- özelliğini ayarlamak
HttpContext.User
ve istekler için Yetkilendirme Ara Yazılımını çalıştırmak için ve UseAuthorization öğesini çağırınUseAuthentication.UseAuthentication
veUseAuthorization
gibi MapRazorPages yöntemlerden önceMap
çağrılmalıdırMapDefaultControllerRoute
using Microsoft.AspNetCore.Authentication.Cookies;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
builder.Services.AddHttpContextAccessor();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.MapDefaultControllerRoute();
app.Run();
AuthenticationScheme geçirildi AddAuthentication
ayarı, uygulama için varsayılan kimlik doğrulama düzenini ayarlar. AuthenticationScheme
birden çok kimlik doğrulaması örneği cookie olduğunda ve uygulamanın belirli bir şemayla yetkilendirmesi gerektiğinde kullanışlıdır. AuthenticationScheme
cookieAuthenticationDefaults.AuthenticationScheme olarak ayarlanması şema için değerini "Cookies"
sağlar. Düzeni ayırt eden herhangi bir dize değeri kullanılabilir.
Uygulamanın kimlik doğrulama düzeni, uygulamanın cookie kimlik doğrulama düzeninden farklıdır. için bir cookie kimlik doğrulama düzeni sağlanmazsa AddCookiekullanır CookieAuthenticationDefaults.AuthenticationScheme
. CookieAuthenticationDefaults.AuthenticationScheme
GitHub Kaynağı olarak ayarlandığını "Cookies"
gösterir.
Kimlik doğrulamasının cookieIsEssential özelliği varsayılan olarak olarak true
ayarlanır. Site ziyaretçisi veri toplamaya onay vermediğinde kimlik doğrulama tanımlama bilgilerine izin verilir. Daha fazla bilgi için bkz . ASP.NET Core'da Genel Veri Koruma Yönetmeliği (GDPR) desteği.
CookieAuthenticationOptions sınıfı, kimlik doğrulama sağlayıcısı seçeneklerini yapılandırmak için kullanılır.
yönteminde AddCookie yapılandırınCookieAuthenticationOptions:
using Microsoft.AspNetCore.Authentication.Cookies;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
options.SlidingExpiration = true;
options.AccessDeniedPath = "/Forbidden/";
});
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.MapDefaultControllerRoute();
app.Run();
Cookie İlke Ara Yazılımı
İlke Ara Yazılımı (GitHub Kaynağı), UseCookiePolicy ilke özelliklerini etkinleştirircookie.Cookie Ara yazılım, eklenme sırasına göre işlenir:
app.UseCookiePolicy(cookiePolicyOptions);
İşlemenin genel özelliklerini cookie denetlemek ve tanımlama bilgileri eklendiğinde veya silindiğinde işleme işleyicilerine bağlanmak için İlke cookie Ara Yazılımı'na sağlananları kullanınCookiePolicyOptions.Cookie
Varsayılan MinimumSameSitePolicy değer, OAuth2 kimlik doğrulamasına izin vermektir SameSiteMode.Lax
. öğesinin aynı site ilkesini SameSiteMode.Strict
kesinlikle zorunlu kılmak için değerini MinimumSameSitePolicy
ayarlayın. Bu ayar OAuth2 ve diğer çıkış noktaları arası kimlik doğrulama düzenlerini bozsa da, çıkış noktaları arası istek işlemeye dayanmayan diğer uygulama türleri için güvenlik düzeyini cookie yükseltir.
var cookiePolicyOptions = new CookiePolicyOptions
{
MinimumSameSitePolicy = SameSiteMode.Strict,
};
Cookie için MinimumSameSitePolicy
İlke Ara Yazılımı ayarı, ayarların ayarını Cookie.SameSite
CookieAuthenticationOptions
aşağıdaki matrise göre etkileyebilir.
MinimumSameSitePolicy | Cookie. SameSite | CookieSonuç. SameSite ayarı |
---|---|---|
SameSiteMode.None | SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Lax | SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Lax SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Strict | SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Strict SameSiteMode.Strict SameSiteMode.Strict |
Kimlik doğrulaması oluşturma cookie
Tutma kullanıcı bilgileri oluşturmak cookie için bir ClaimsPrincipaloluşturun. Kullanıcı bilgileri serileştirilir ve içinde cookiedepolanır.
Gerekli Claims ile bir ClaimsIdentity oluşturun ve kullanıcıda oturum açmak için arayınSignInAsync. Login.cshtml.cs
örnek uygulamada aşağıdaki kodu içerir:
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
ReturnUrl = returnUrl;
if (ModelState.IsValid)
{
// Use Input.Email and Input.Password to authenticate the user
// with your custom authentication logic.
//
// For demonstration purposes, the sample validates the user
// on the email address maria.rodriguez@contoso.com with
// any password that passes model validation.
var user = await AuthenticateUser(Input.Email, Input.Password);
if (user == null)
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Email),
new Claim("FullName", user.FullName),
new Claim(ClaimTypes.Role, "Administrator"),
};
var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties
{
//AllowRefresh = <bool>,
// Refreshing the authentication session should be allowed.
//ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
// The time at which the authentication ticket expires. A
// value set here overrides the ExpireTimeSpan option of
// CookieAuthenticationOptions set with AddCookie.
//IsPersistent = true,
// Whether the authentication session is persisted across
// multiple requests. When used with cookies, controls
// whether the cookie's lifetime is absolute (matching the
// lifetime of the authentication ticket) or session-based.
//IssuedUtc = <DateTimeOffset>,
// The time at which the authentication ticket was issued.
//RedirectUri = <string>
// The full path or absolute URI to be used as an http
// redirect response value.
};
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);
_logger.LogInformation("User {Email} logged in at {Time}.",
user.Email, DateTime.UtcNow);
return LocalRedirect(Url.GetLocalUrl(returnUrl));
}
// Something failed. Redisplay the form.
return Page();
}
Kod açıklamalarının İngilizce dışındaki dillere çevirisini görmek isterseniz, bunu bu GitHub tartışma konusunda bize bildirin.
SignInAsync
şifrelenmiş cookie bir oluşturur ve bunu geçerli yanıta ekler. Belirtilmezse AuthenticationScheme
, varsayılan düzen kullanılır.
RedirectUri varsayılan olarak yalnızca birkaç belirli yolda kullanılır, örneğin oturum açma yolu ve oturum kapatma yolları. Daha fazla bilgi için bkz . CookieAuthenticationHandler kaynağı.
ASP.NET Core'un Veri Koruma sistemi şifreleme için kullanılır. Birden çok makinede barındırılan bir uygulama için, uygulamalar arasında yük dengeleme veya bir web grubu kullanmak için veri korumasını aynı anahtar halkasını ve uygulama tanımlayıcısını kullanacak şekilde yapılandırın.
Oturumu kapat
Geçerli kullanıcıyı oturumu kapatmak ve silmek cookieiçin öğesini çağırın SignOutAsync:
public async Task OnGetAsync(string returnUrl = null)
{
if (!string.IsNullOrEmpty(ErrorMessage))
{
ModelState.AddModelError(string.Empty, ErrorMessage);
}
// Clear the existing external cookie
await HttpContext.SignOutAsync(
CookieAuthenticationDefaults.AuthenticationScheme);
ReturnUrl = returnUrl;
}
Şema olarak veya "Tanımlama Bilgileri" kullanılmıyorsaCookieAuthenticationDefaults.AuthenticationScheme
, kimlik doğrulama sağlayıcısını yapılandırırken kullanılan düzeni sağlayın. Aksi takdirde, varsayılan düzen kullanılır. Örneğin, düzen olarak "ContosoCookie" kullanılıyorsa, kimlik doğrulama sağlayıcısını yapılandırırken kullanılan düzeni sağlayın.
Tarayıcı kapatıldığında oturum tabanlı tanımlama bilgileri (kalıcı olmayan tanımlama bilgileri) otomatik olarak silinir, ancak tek bir sekme kapatıldığında hiçbir tanımlama bilgisi temizilmez. Sunucuya sekme veya tarayıcı kapatma olayları bildirilir.
Arka uç değişikliklerine tepki verme
oluşturulduktan cookie sonra, cookie tek kaynağıdır identity. Bir kullanıcı hesabı arka uç sistemlerinde devre dışı bırakıldıysa:
- Uygulamanın cookie kimlik doğrulama sistemi, kimlik doğrulamasına cookiegöre istekleri işlemeye devam eder.
- Kimlik doğrulaması cookie geçerli olduğu sürece kullanıcı uygulamada oturum açmış durumda kalır.
Olay, ValidatePrincipal öğesinin cookieidentitydoğrulamasını kesmek ve geçersiz kılmak için kullanılabilir. her istekte öğesinin doğrulanmış olarak cookie etkinleştirilmesi, kullanıcıların uygulamaya erişimini iptal etme riskini azaltır.
Doğrulamaya cookie yönelik bir yaklaşım, kullanıcı veritabanının ne zaman değiştiğini izlemeye dayanır. Kullanıcının verileri verildiğinden bu yana cookie veritabanı değiştirilmediyse, kullanıcı hala geçerliyse cookie kullanıcının kimliğini yeniden doğrulamaya gerek yoktur. Örnek uygulamada veritabanı içinde IUserRepository
uygulanır ve bir LastChanged
değer depolar. Veritabanında bir kullanıcı güncelleştirildiğinde, LastChanged
değer geçerli saate ayarlanır.
Veritabanı değere göre değiştiğinde değerini cookie geçersiz kılması için veritabanındaki geçerli LastChanged
değeri içeren bir LastChanged
taleple oluşturuncookie:LastChanged
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Email),
new Claim("LastChanged", {Database Value})
};
var claimsIdentity = new ClaimsIdentity(
claims,
CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity));
Olay için geçersiz kılma uygulamak için ValidatePrincipal
, öğesinden CookieAuthenticationEventstüretilen bir sınıfta aşağıdaki imzaya sahip bir yöntem yazın:
ValidatePrincipal(CookieValidatePrincipalContext)
Aşağıda örnek bir uygulaması verilmiştir CookieAuthenticationEvents
:
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
public class CustomCookieAuthenticationEvents : CookieAuthenticationEvents
{
private readonly IUserRepository _userRepository;
public CustomCookieAuthenticationEvents(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public override async Task ValidatePrincipal(CookieValidatePrincipalContext context)
{
var userPrincipal = context.Principal;
// Look for the LastChanged claim.
var lastChanged = (from c in userPrincipal.Claims
where c.Type == "LastChanged"
select c.Value).FirstOrDefault();
if (string.IsNullOrEmpty(lastChanged) ||
!_userRepository.ValidateLastChanged(lastChanged))
{
context.RejectPrincipal();
await context.HttpContext.SignOutAsync(
CookieAuthenticationDefaults.AuthenticationScheme);
}
}
}
Hizmet kaydı sırasında cookie olay örneğini kaydedin. Sınıfınız CustomCookieAuthenticationEvents
için kapsamlı bir hizmet kaydı sağlayın:
using Microsoft.AspNetCore.Authentication.Cookies;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.EventsType = typeof(CustomCookieAuthenticationEvents);
});
builder.Services.AddScoped<CustomCookieAuthenticationEvents>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.MapDefaultControllerRoute();
app.Run();
Kullanıcının adının güncelleştirildiği bir durumu( güvenliği hiçbir şekilde etkilemeyen bir karar) düşünün. Kullanıcı sorumlusunu yıkıcı olmayan bir şekilde güncelleştirmek istiyorsanız, öğesini çağırın context.ReplacePrincipal
context.ShouldRenew
ve özelliğini olarak true
ayarlayın.
Uyarı
Burada açıklanan yaklaşım her istekte tetikleniyor. Her istekte tüm kullanıcılar için kimlik doğrulama tanımlama bilgilerinin doğrulanıyorsa uygulama için büyük bir performans cezası oluşabilir.
Kalıcı tanımlama bilgileri
tarayıcı oturumlarında kalıcı olmasını isteyebilirsiniz cookie . Bu kalıcılık yalnızca oturum açmada "Beni Anımsa" onay kutusu veya benzer bir mekanizma ile açık kullanıcı onayıyla etkinleştirilmelidir.
Aşağıdaki kod parçacığı, tarayıcı kapanışları aracılığıyla devam eden ve karşılık gelen cookie bir identity kod parçacığı oluşturur. Daha önce yapılandırılmış kayan süre sonu ayarları kabul edilir. cookie Tarayıcı kapatılırken süresi dolarsa, tarayıcı yeniden başlatıldıktan sonra tarayıcıyı cookie temizler.
içinde AuthenticationPropertiesolarak true
ayarlayınIsPersistent:
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true
});
Mutlak cookie süre sonu
ile ExpiresUtcmutlak süre sonu ayarlanabilir. Kalıcı cookieIsPersistent
bir oluşturmak için de ayarlanmalıdır. Aksi takdirde, cookie oturum tabanlı bir yaşam süresiyle oluşturulur ve sahip olduğu kimlik doğrulama biletinden önce veya sonra süresi dolabilir. ExpiresUtc
Ayarlandığında, ayarlanırsa seçeneğinin ExpireTimeSpan CookieAuthenticationOptionsdeğerini geçersiz kılar.
Aşağıdaki kod parçacığı, 20 dakika süren ve buna karşılık gelen cookie bir identity kod parçacığı oluşturur. Bu, daha önce yapılandırılmış kayan süre sonu ayarlarını yoksayar.
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddMinutes(20)
});
ASP.NET Core Identity , oturum açma bilgileri oluşturmaya ve sürdürmeye yönelik eksiksiz ve tam özellikli bir kimlik doğrulama sağlayıcısıdır. Ancak, ASP.NET Core Identity içermeyen tabanlı bir cookiekimlik doğrulama sağlayıcısı kullanılabilir. Daha fazla bilgi için bkz. ASP.NET Core'a Identitygiriş.
Örnek kodu görüntüleme veya indirme (indirme)
Örnek uygulamada gösterim amacıyla, maria Rodriguez adlı varsayımsal kullanıcının kullanıcı hesabı uygulamaya sabit kodlanmıştır. Kullanıcıda oturum açmak için E-posta adresini maria.rodriguez@contoso.com
ve herhangi bir parolayı kullanın. Kullanıcının kimliği dosyasındaki AuthenticateUser
yönteminde Pages/Account/Login.cshtml.cs
doğrulanır. Gerçek dünyadaki bir örnekte kullanıcının kimliği bir veritabanında doğrulanır.
Yapılandırma
yönteminde Startup.ConfigureServices
ve AddCookie yöntemleriyle AddAuthentication Kimlik Doğrulama Ara Yazılımı hizmetlerini oluşturun:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
AuthenticationScheme geçirildi AddAuthentication
ayarı, uygulama için varsayılan kimlik doğrulama düzenini ayarlar. AuthenticationScheme
birden çok kimlik doğrulaması örneği cookie olduğunda ve belirli bir şemayla yetkilendirmek istediğinizde kullanışlıdır. AuthenticationScheme
cookieAuthenticationDefaults.AuthenticationScheme ayarı, şema için "Tanımlama Bilgileri" değeri sağlar. Düzeni ayırt eden herhangi bir dize değeri sağlayabilirsiniz.
Uygulamanın kimlik doğrulama düzeni, uygulamanın cookie kimlik doğrulama düzeninden farklıdır. için bir cookie kimlik doğrulama düzeni sağlanmazsa AddCookie("Tanımlama Bilgileri") kullanılır CookieAuthenticationDefaults.AuthenticationScheme
.
Kimlik doğrulamasının cookieIsEssential özelliği varsayılan olarak olarak true
ayarlanır. Site ziyaretçisi veri toplamaya onay vermediğinde kimlik doğrulama tanımlama bilgilerine izin verilir. Daha fazla bilgi için bkz . ASP.NET Core'da Genel Veri Koruma Yönetmeliği (GDPR) desteği.
içindeStartup.Configure
, özelliğini ayarlamak ve UseAuthorization
istekler için Yetkilendirme Ara Yazılımı'nı HttpContext.User
çalıştırmak için ve öğesini çağırınUseAuthentication
. UseAuthentication
çağrısından önce ve UseAuthorization
yöntemlerini çağırınUseEndpoints
:
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapRazorPages();
});
CookieAuthenticationOptions sınıfı, kimlik doğrulama sağlayıcısı seçeneklerini yapılandırmak için kullanılır.
yönteminde kimlik doğrulaması için hizmet yapılandırmasında Startup.ConfigureServices
ayarlayınCookieAuthenticationOptions
:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
...
});
Cookie İlke Ara Yazılımı
Cookie İlke Ara Yazılımı , ilke özelliklerini etkinleştirir cookie . Ara yazılımı uygulama işleme işlem hattına eklemek siparişe duyarlıdır; yalnızca işlem hattında kayıtlı aşağı akış bileşenlerini etkiler.
app.UseCookiePolicy(cookiePolicyOptions);
İşlemenin genel özelliklerini cookie denetlemek ve tanımlama bilgileri eklendiğinde veya silindiğinde işleme işleyicilerine bağlanmak için İlke cookie Ara Yazılımı'na sağlananları kullanınCookiePolicyOptions.Cookie
Varsayılan MinimumSameSitePolicy değer, OAuth2 kimlik doğrulamasına izin vermektir SameSiteMode.Lax
. öğesinin aynı site ilkesini SameSiteMode.Strict
kesinlikle zorunlu kılmak için değerini MinimumSameSitePolicy
ayarlayın. Bu ayar OAuth2 ve diğer çıkış noktaları arası kimlik doğrulama düzenlerini bozsa da, çıkış noktaları arası istek işlemeye dayanmayan diğer uygulama türleri için güvenlik düzeyini cookie yükseltir.
var cookiePolicyOptions = new CookiePolicyOptions
{
MinimumSameSitePolicy = SameSiteMode.Strict,
};
Cookie için MinimumSameSitePolicy
İlke Ara Yazılımı ayarı, ayarların ayarını Cookie.SameSite
CookieAuthenticationOptions
aşağıdaki matrise göre etkileyebilir.
MinimumSameSitePolicy | Cookie. SameSite | CookieSonuç. SameSite ayarı |
---|---|---|
SameSiteMode.None | SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Lax | SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Lax SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Strict | SameSiteMode.None SameSiteMode.Lax SameSiteMode.Strict |
SameSiteMode.Strict SameSiteMode.Strict SameSiteMode.Strict |
Kimlik doğrulaması oluşturma cookie
Tutma kullanıcı bilgileri oluşturmak cookie için bir ClaimsPrincipaloluşturun. Kullanıcı bilgileri serileştirilir ve içinde cookiedepolanır.
Gerekli Claims ile bir ClaimsIdentity oluşturun ve kullanıcı oturum açmak için çağrısıSignInAsync:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Email),
new Claim("FullName", user.FullName),
new Claim(ClaimTypes.Role, "Administrator"),
};
var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties
{
//AllowRefresh = <bool>,
// Refreshing the authentication session should be allowed.
//ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
// The time at which the authentication ticket expires. A
// value set here overrides the ExpireTimeSpan option of
// CookieAuthenticationOptions set with AddCookie.
//IsPersistent = true,
// Whether the authentication session is persisted across
// multiple requests. When used with cookies, controls
// whether the cookie's lifetime is absolute (matching the
// lifetime of the authentication ticket) or session-based.
//IssuedUtc = <DateTimeOffset>,
// The time at which the authentication ticket was issued.
//RedirectUri = <string>
// The full path or absolute URI to be used as an http
// redirect response value.
};
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);
Kod açıklamalarının İngilizce dışındaki dillere çevirisini görmek isterseniz, bunu bu GitHub tartışma konusunda bize bildirin.
SignInAsync
şifrelenmiş cookie bir oluşturur ve bunu geçerli yanıta ekler. Belirtilmezse AuthenticationScheme
, varsayılan düzen kullanılır.
RedirectUri varsayılan olarak yalnızca birkaç belirli yolda kullanılır, örneğin oturum açma yolu ve oturum kapatma yolları. Daha fazla bilgi için bkz . CookieAuthenticationHandler kaynağı.
ASP.NET Core'un Veri Koruma sistemi şifreleme için kullanılır. Birden çok makinede barındırılan bir uygulama için, uygulamalar arasında yük dengeleme veya bir web grubu kullanmak için veri korumasını aynı anahtar halkasını ve uygulama tanımlayıcısını kullanacak şekilde yapılandırın.
Oturumu kapat
Geçerli kullanıcıyı oturumu kapatmak ve silmek cookieiçin öğesini çağırın SignOutAsync:
await HttpContext.SignOutAsync(
CookieAuthenticationDefaults.AuthenticationScheme);
Şema olarak (veya "Tanımlama Bilgileri") kullanılmıyorsa CookieAuthenticationDefaults.AuthenticationScheme
(örneğin, "ContosoCookie"), kimlik doğrulama sağlayıcısını yapılandırırken kullanılan düzeni sağlayın. Aksi takdirde, varsayılan düzen kullanılır.
Tarayıcı kapatıldığında oturum tabanlı tanımlama bilgileri (kalıcı olmayan tanımlama bilgileri) otomatik olarak silinir, ancak tek bir sekme kapatıldığında hiçbir tanımlama bilgisi temizilmez. Sunucuya sekme veya tarayıcı kapatma olayları bildirilir.
Arka uç değişikliklerine tepki verme
oluşturulduktan cookie sonra, cookie tek kaynağıdır identity. Bir kullanıcı hesabı arka uç sistemlerinde devre dışı bırakıldıysa:
- Uygulamanın cookie kimlik doğrulama sistemi, kimlik doğrulamasına cookiegöre istekleri işlemeye devam eder.
- Kimlik doğrulaması cookie geçerli olduğu sürece kullanıcı uygulamada oturum açmış durumda kalır.
Olay, ValidatePrincipal öğesinin cookieidentitydoğrulamasını kesmek ve geçersiz kılmak için kullanılabilir. her istekte öğesinin doğrulanmış olarak cookie etkinleştirilmesi, kullanıcıların uygulamaya erişimini iptal etme riskini azaltır.
Doğrulamaya cookie yönelik bir yaklaşım, kullanıcı veritabanının ne zaman değiştiğini izlemeye dayanır. Kullanıcının verileri verildiğinden bu yana cookie veritabanı değiştirilmediyse, kullanıcı hala geçerliyse cookie kullanıcının kimliğini yeniden doğrulamaya gerek yoktur. Örnek uygulamada veritabanı içinde IUserRepository
uygulanır ve bir LastChanged
değer depolar. Veritabanında bir kullanıcı güncelleştirildiğinde, LastChanged
değer geçerli saate ayarlanır.
Veritabanı değere göre değiştiğinde değerini cookie geçersiz kılması için veritabanındaki geçerli LastChanged
değeri içeren bir LastChanged
taleple oluşturuncookie:LastChanged
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Email),
new Claim("LastChanged", {Database Value})
};
var claimsIdentity = new ClaimsIdentity(
claims,
CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity));
Olay için geçersiz kılma uygulamak için ValidatePrincipal
, öğesinden CookieAuthenticationEventstüretilen bir sınıfta aşağıdaki imzaya sahip bir yöntem yazın:
ValidatePrincipal(CookieValidatePrincipalContext)
Aşağıda örnek bir uygulaması verilmiştir CookieAuthenticationEvents
:
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
public class CustomCookieAuthenticationEvents : CookieAuthenticationEvents
{
private readonly IUserRepository _userRepository;
public CustomCookieAuthenticationEvents(IUserRepository userRepository)
{
// Get the database from registered DI services.
_userRepository = userRepository;
}
public override async Task ValidatePrincipal(CookieValidatePrincipalContext context)
{
var userPrincipal = context.Principal;
// Look for the LastChanged claim.
var lastChanged = (from c in userPrincipal.Claims
where c.Type == "LastChanged"
select c.Value).FirstOrDefault();
if (string.IsNullOrEmpty(lastChanged) ||
!_userRepository.ValidateLastChanged(lastChanged))
{
context.RejectPrincipal();
await context.HttpContext.SignOutAsync(
CookieAuthenticationDefaults.AuthenticationScheme);
}
}
}
yönteminde hizmet kaydı sırasında cookie olay örneğini Startup.ConfigureServices
kaydedin. Sınıfınız CustomCookieAuthenticationEvents
için kapsamlı bir hizmet kaydı sağlayın:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.EventsType = typeof(CustomCookieAuthenticationEvents);
});
services.AddScoped<CustomCookieAuthenticationEvents>();
Kullanıcının adının güncelleştirildiği bir durumu( güvenliği hiçbir şekilde etkilemeyen bir karar) düşünün. Kullanıcı sorumlusunu yıkıcı olmayan bir şekilde güncelleştirmek istiyorsanız, öğesini çağırın context.ReplacePrincipal
context.ShouldRenew
ve özelliğini olarak true
ayarlayın.
Uyarı
Burada açıklanan yaklaşım her istekte tetikleniyor. Her istekte tüm kullanıcılar için kimlik doğrulama tanımlama bilgilerinin doğrulanıyorsa uygulama için büyük bir performans cezası oluşabilir.
Kalıcı tanımlama bilgileri
tarayıcı oturumlarında kalıcı olmasını isteyebilirsiniz cookie . Bu kalıcılık yalnızca oturum açmada "Beni Anımsa" onay kutusu veya benzer bir mekanizma ile açık kullanıcı onayıyla etkinleştirilmelidir.
Aşağıdaki kod parçacığı, tarayıcı kapanışları aracılığıyla devam eden ve karşılık gelen cookie bir identity kod parçacığı oluşturur. Daha önce yapılandırılmış kayan süre sonu ayarları kabul edilir. cookie Tarayıcı kapatılırken süresi dolarsa, tarayıcı yeniden başlatıldıktan sonra tarayıcıyı cookie temizler.
içinde AuthenticationPropertiesolarak true
ayarlayınIsPersistent:
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true
});
Mutlak cookie süre sonu
ile ExpiresUtcmutlak süre sonu ayarlanabilir. Kalıcı cookieIsPersistent
bir oluşturmak için de ayarlanmalıdır. Aksi takdirde, cookie oturum tabanlı bir yaşam süresiyle oluşturulur ve sahip olduğu kimlik doğrulama biletinden önce veya sonra süresi dolabilir. ExpiresUtc
Ayarlandığında, ayarlanırsa seçeneğinin ExpireTimeSpan CookieAuthenticationOptionsdeğerini geçersiz kılar.
Aşağıdaki kod parçacığı, 20 dakika süren ve buna karşılık gelen cookie bir identity kod parçacığı oluşturur. Bu, daha önce yapılandırılmış kayan süre sonu ayarlarını yoksayar.
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddMinutes(20)
});
ASP.NET Core