asp.net core 3.1 cookie httpOnly 登录验证
2021-03-12 23:29
                         标签:cno   fse   core   有关   cal   dac   持久化   重载   名称    region set-cookie to ie     1.startup.cs ConfigureServices 添加 //注册Cookie认证服务  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)   2.startup.cs Configure添加 //要放在app.UseRouting、app.UseCors之后,并且在app.UseEndpoints之前   3.login 方法:              //下面的变量claims是Claim类型的数组,Claim是string类型的键值对,所以claims数组中可以存储任意个和用户有关的信息,             //    //可以使用HttpContext.SignInAsync方法的重载来定义持久化cookie存储用户认证信息,例如下面的代码就定义了用户登录后60分钟内cookie都会保留在客户端计算机硬盘上,             //}).Wait();     4. 验证是否登录             //if (HttpContext.User.Identity.IsAuthenticated)   //HttpContext.User.Identities.Count()>0) asp.net core 3.1 cookie httpOnly  登录验证 标签:cno   fse   core   有关   cal   dac   持久化   重载   名称    原文地址:https://www.cnblogs.com/csj007523/p/12823355.html
            .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
            });
            app.UseAuthentication();
            app.UseAuthorization();
            //不过要注意这些信息都是加密后存储在客户端浏览器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);
            //    //即便用户关闭了浏览器,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
            //    });
            //  */
            // 如果HttpContext.User.Identity.IsAuthenticated为true,
            //{
            //    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;
文章标题:asp.net core 3.1 cookie httpOnly 登录验证
文章链接:http://soscw.com/index.php/essay/63872.html