asp.net core 3.1 cookie httpOnly 登录验证

region set-cookie to ie

 

 

1.startup.cs ConfigureServices 添加

//注册Cookie认证服务

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, option =>
{
option.AccessDeniedPath = "/Login"; //当用户尝试访问资源但没有通过任何授权策略时,这是请求会重定向的相对路径资源
option.LoginPath = "/Login/";
option.Cookie.Name = "token";//设置存储用户登录信息(用户Token信息)的Cookie名称
option.Cookie.HttpOnly = true;//设置存储用户登录信息(用户Token信息)的Cookie,无法通过客户端浏览器脚本(如JavaScript等)访问到
//option.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;//设置存储用户登录信息(用户Token信息)的Cookie,只会通过HTTPS协议传递,如果是HTTP协议,Cookie不会被发送。注意,option.Cookie.SecurePolicy属性的默认值是Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest
});

 

2.startup.cs Configure添加

//要放在app.UseRouting、app.UseCors之后,并且在app.UseEndpoints之前
app.UseAuthentication();
app.UseAuthorization();

 

3.login 方法: 

//下面的变量claims是Claim类型的数组,Claim是string类型的键值对,所以claims数组中可以存储任意个和用户有关的信息,
//不过要注意这些信息都是加密后存储在客户端浏览器cookie中的,所以最好不要存储太多特别敏感的信息,这里我们只存储了用户名到claims数组,
//表示当前登录的用户是谁
//var claims = new[] { new Claim("token", UserName) };
//var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
//ClaimsPrincipal user = new ClaimsPrincipal(claimsIdentity);

//Task.Run(async () =>
//{
// //登录用户,相当于ASP.NET中的FormsAuthentication.SetAuthCookie
// await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user);

// //可以使用HttpContext.SignInAsync方法的重载来定义持久化cookie存储用户认证信息,例如下面的代码就定义了用户登录后60分钟内cookie都会保留在客户端计算机硬盘上,
// //即便用户关闭了浏览器,60分钟内再次访问站点仍然是处于登录状态,除非调用Logout方法注销登录。
// //注意其中的AllowRefresh属性,如果AllowRefresh为true,表示如果用户登录后在超过50%的ExpiresUtc时间间隔内又访问了站点,就延长用户的登录时间(其实就是延长cookie在客户端计算机硬盘上的保留时间),
// //例如本例中我们下面设置了ExpiresUtc属性为60分钟后,那么当用户登录后在大于30分钟且小于60分钟内访问了站点,那么就将用户登录状态再延长到当前时间后的60分钟。但是用户在登录后的30分钟内访问站点是不会延长登录时间的,
// //因为ASP.NET Core有个硬性要求,是用户在超过50%的ExpiresUtc时间间隔内又访问了站点,才延长用户的登录时间。
// //如果AllowRefresh为false,表示用户登录后60分钟内不管有没有访问站点,只要60分钟到了,立马就处于非登录状态(不延长cookie在客户端计算机硬盘上的保留时间,60分钟到了客户端计算机就自动删除cookie)
// /*
// await HttpContext.SignInAsync(
// CookieAuthenticationDefaults.AuthenticationScheme,
// user, new AuthenticationProperties()
// {
// IsPersistent = true,
// ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60),
// AllowRefresh = true
// });
// */

//}).Wait();

 

 

4. 验证是否登录
// 如果HttpContext.User.Identity.IsAuthenticated为true,

//if (HttpContext.User.Identity.IsAuthenticated)   //HttpContext.User.Identities.Count()>0)
//{
// HttpContext.AuthenticateAsync();
// //这里通过 HttpContext.User.Claims 可以将我们在Login这个Action中存储到cookie中的所有
// //claims键值对都读出来,比如我们刚才定义的UserName的值Wangdacui就在这里读取出来了
// var userName = HttpContext.User.Claims.First().Value;
// if (!string.IsNullOrEmpty(userName))
// {
// bool IsLogin = true;
// }
//}
//string str = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort;

posted @ 2020-05-03 20:48  大树2  阅读(1794)  评论(0编辑  收藏  举报