然后,将在Startup.cs的ConfigureServices方法中将Cookie服务注册进行配置:
services.AddAuthentication("MyCookieAuthenticationScheme") .AddCookie(options => { options.Events = new CookieAuthenticationEvents { OnValidatePrincipal = LastChangedValidator.ValidateAsync }; });如果要非破坏性地更新用户主体,可以调用context.ReplacePrincipal(),并将context.ShouldRenew属性设置为true。
Cookie设置选项CookieAuthenticationOptions类提供了各种配置选项,在创建时调整Cookie的配置。
ASP.NET Core 1.x在Startup.cs文件中的Configure方法中使用CookieAuthenticationOptions的例子如下:
app.UseCookieAuthentication(new CookieAuthenticationOptions { CookieName = "AuthCookie", CookieDomain = "contoso.com", CookiePath = "/", CookieHttpOnly = true, CookieSecure = CookieSecurePolicy.Always }); ASP.NET Core 2.xASP.NET Core 2.x 统一了用于配置Cookie的API。1.x API已被标记为过时,并且在CookieAuthenticationOptions类中引入了一种类型为CookieBuilder新的Cookie属性。建议您迁移到2.x API。
在Startup.cs的ConfigureServices方法中使用CookieAuthenticationOptions的例子如下:
services.AddAuthentication() .AddCookie(options => { options.Cookie.Name = "AuthCookie"; options.Cookie.Domain = "contoso.com"; options.Cookie.Path = "/"; options.Cookie.HttpOnly = true; options.Cookie.SameSite = SameSiteMode.Lax; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; }); 持久Cookie和绝对到期时间您可能希望Cookie在浏览器会话中持续存在,并希望设置身份和Cookie传输的绝对过期时间。这种持久性应该只能是用户显示同意,在登录时的“记住我”复选框或类似的机制启用。您可以通过在时调用的SignInAsync方法中使用AuthenticationProperties参数来执行这些操作。例如:
ASP.NET Core 1.x await HttpContext.Authentication.SignInAsync( "MyCookieAuthenticationScheme", principal, new AuthenticationProperties { IsPersistent = true });上述代码片段中使用的AuthenticationProperties类,位于Microsoft.AspNetCore.Http.Authentication命名空间中。
ASP.NET Core 2.x await HttpContext.SignInAsync( "MyCookieAuthenticationScheme", principal, new AuthenticationProperties { IsPersistent = true });上述代码片段中使用的AuthenticationProperties类,位于Microsoft.AspNetCore.Authentication命名空间中。
上面的代码段创建一个身份和相应的Cookie,直到浏览器关闭。以前通过配置的任何滑动过期设置仍然有效。如果Cookie在浏览器关闭时过期,浏览器会在重新启动后清除它。如果Cookie在浏览器关闭时过期,浏览器会在重新启动后清除它。
ASP.NET Core 1.x await HttpContext.Authentication.SignInAsync( "MyCookieAuthenticationScheme", principal, new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(20) }); ASP.NET Core 2.x await HttpContext.SignInAsync( "MyCookieAuthenticationScheme", principal, new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(20) });上述代码段创建一个持续20分钟的身份和相应的cookie。这将忽略以前通过配置的任何滑动过期设置。
ExpiresUtc和IsPersistent属性是互斥的。
原文:《Using Cookie Authentication without ASP.NET Core Identity》https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x
翻译:Sweet Tang
本文地址:< >
欢迎转载,请在明显位置给出出处及链接。
posted on