栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.Net 5基于 JWT 令牌认证

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.Net 5基于 JWT 令牌认证

.Net 5基于 JWT 令牌认证 传统验证方式
  1. 服务器接收用户请求发送的用户名和密码
  2. 服务器验证通过后,在当前对话(session)里面保存相关数据
  3. 服务器返回一个 session_id,写入用户的 Cookie
  4. 用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器,服务器通过 session_id,找到前期保存的数据,从而得知用户的身份

    传统验证方法如果是面对服务器集群就要求 session 数据共享,每台服务器都能够读取 session。但如果session存储的节点挂了怎么办?

    这时,Token验证方式就应运而生了
JWT实现认证和授权

1.通过Nuget安装 Microsoft.AspNetCore.Authentication.JwtBearer
(注意V6.0.0对应.net 6,.net5只需要安装V5版本即可)

2.配置JWT配置文件

创建JWTTokenOptions类

3.注册中间件

4.根据用户名和密码生成Token

      public string GetToken(string UserName, string password, User user)
        {
            var claims = new[]
            {
                 new Claim("username", user.username),
                 new Claim("id", user.id.ToString()) 
            };

            //需要加密:需要加密key:
            SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_JWTTokenOptions.SecurityKey));
            SigningCredentials creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            JwtSecurityToken token = new JwtSecurityToken(
             issuer: _JWTTokenOptions.Issuer,
             audience: _JWTTokenOptions.Audience,
             claims: claims,
             expires: DateTime.Now.AddMinutes(5),
             signingCredentials: creds);
            string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
            return returnToken;
        }

返回Token

        public JsonResult Accredit([FromForm] string username, [FromForm] string password)
        {
            AjaxResult ajaxResult = _HttpHelperService.VerifyUser(username, password);
            if (ajaxResult.Result)
            {
                string token = this._iJWTService.GetToken(username, password, ajaxResult.TValue);
                ajaxResult.Value = token;
            }
            Console.WriteLine($"Accredit Result : {JsonConvert.SerializeObject(ajaxResult)}");
            return new JsonResult(ajaxResult);
        }

拿到Token,就可以返回到前端存到本地缓存了

经过以上几步,初步实现了JWT认证的功能,这个地方我们还可以采用黑名单机制(Redis)这里就不过多讨论了
  • 在退出登录的时候将相应Token加入黑名单;
  • 修改人员的时候记录人员和时间,将当时间之前的所有Token判定为无效
  • 每次请求都通过Redis黑名单验证Token的有效性。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908875.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号