ASP.NET CORE JWT认证

ASP.NET CORE版本:.NET 5.0 

关于JWT的基础知识,请大家上网搜一下,这里主要从代码层面讲解。

首先新建一个ASP.NET CORE Web api的空项目,然后新建一个LoginController的api控制器。

从nuget中安装包:Microsoft.AspNetCore.Authentication.JwtBearer;

1、生成Token

先看代码:

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LoginController : Controller
    {
        private readonly PermissionRequirement _permissionRequirement;
        public LoginController(PermissionRequirement permissionRequirement)
        {
            _permissionRequirement = permissionRequirement;
        }
        [HttpGet]
        public IActionResult GetJwtToken(string userName, string password)
        {
            var claims = new List {
                        new Claim(ClaimTypes.GivenName, "mark"),
                        new Claim(ClaimTypes.Name, userName),
                        new Claim(JwtRegisteredClaimNames.Jti, "10000") };
            var roles = new List();
            if (userName == "ncy")
            {
                roles.Add(new Claim(ClaimTypes.Role, "admin"));
            }
            else
            {
                roles.Add(new Claim(ClaimTypes.Role, "normal"));
            }
            claims.AddRange(roles);
            var token = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
            var jm = new RespEntity();
            jm.code = 0;
            jm.data = token;
            jm.msg = "success";

            return Json(jm);
        }
    }

我这里根据输入的用户名来添加不同的角色是为了做角色的权限控制,大家不用理会这个。

PermissionRequirement是认证需要的参数字段组成的一个类,定义如下:

    public class PermissionRequirement : IAuthorizationRequirement
    {
        /// 
        /// 用户权限集合,一个订单包含了很多详情,
        /// 同理,一个网站的认证发行中,也有很多权限详情(这里是Role和URL的关系)
        /// 
        public List Permissions { get; set; }
        /// 
        /// 无权限action
        /// 
        public string DeniedAction { get; set; }

        /// 
        /// 认证授权类型
        /// 
        public string ClaimType { internal get; set; }
        /// 
        /// 请求路径
        /// 
        public string LoginPath { get; set; } = "/Api/Login";
        /// 
        /// 发行人
        /// 
        public string Issuer { get; set; }
        /// 
        /// 订阅人
 

你可能感兴趣的:(ASP.NET,CORE,asp.net,core,jwt)