zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    Mysql 导入CSV数据 语句 导入时出现乱码的解决方案
    有用的 Mongo命令行 db.currentOp() db.collection.find().explain()
    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法 -摘自网络
    MongoDB索引相关文章-摘自网络
    批量更新MongoDB的列。
    RabbitMQ 消费端 Client CPU 100%的解决办法
    php根据命令行参数生成配置文件
    php解释命令行的参数
    使用memcache对wordpress优化,提速
    python基础技巧综合训练题2
  • 原文地址:https://www.cnblogs.com/csj007523/p/12823355.html
Copyright © 2011-2022 走看看