ASP.NET Core JWT授权验证----生成Token

- JWT 授权验证

一、 获取Token

                //模拟用户角色 实际数据库查询
                var userRoles = "Admin,System,user,DXLSystem";
                //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色
                var claims = new List                {
                    new Claim(ClaimTypes.Name, name),
                    new Claim(JwtRegisteredClaimNames.Jti, user.FirstOrDefault().Id.ToString()),
                    new Claim("TenantId", user.FirstOrDefault().TenantId.ToString()),
                    new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.ToString()),
                    new Claim(ClaimTypes.Expiration,
                        DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
                };
                claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));
                // 可以加入用户权限列表
                //_requirement.Permissions = list;
                var token = JwtToken.BuildJwtToken(claims.ToArray(), _requirement);
                return new MessageModel()
                {
                    success = true,
                    status = 200,
                    msg = "获取成功",
                     response= token
                };

二、 生成Token 类

 public class JwtToken
 { 
        public static TokenInfoViewModel BuildJwtToken(Claim[] claims, PermissionRequirement permissionRequirement)
     {
         var now = DateTime.Now;
         // 实例化JwtSecurityToken
         var jwt = new JwtSecurityToken(
             issuer: permissionRequirement.Issuer,
             audience: permissionRequirement.Audience,
             claims: claims,
             notBefore: now,
             expires: now.Add(permissionRequirement.Expiration),
             signingCredentials: permissionRequirement.SigningCredentials
         );
         // 生成 Token
         var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

         //打包返回前台
         var responseJson = new TokenInfoViewModel
         {
             success = true,
             token = encodedJwt,
             expires_in = permissionRequirement.Expiration.TotalSeconds,
             token_type = "Bearer"
         };
         return responseJson;
     }
 }

三、用到的实体类

 public class TokenInfoViewModel
 {
     public bool success { get; set; }
     public string token { get; set; }
     public double expires_in { get; set; }
     public string token_type { get; set; }
 }
 public class MessageModel {
     ///      /// 状态码
     ///      public int status { get; set; } = 200;
     ///      /// 操作是否成功
     ///      public bool success { get; set; } = false;
     ///      /// 返回信息
     ///      public string msg { get; set; } = "";
     ///      /// 开发者信息
     ///      public string msgDev { get; set; }
     ///      /// 返回数据集合
     ///      public T response { get; set; }
    }