.Net Core基于JWT的token的权限认证

本文介绍了在.Net Core后端开发中如何基于JWT实现用户权限认证。详细讲解了鉴权流程,包括用户验证、token生成与校验、过滤器使用、JWT加解密以及token的存取。同时,提到了在StartUp类中全局注册过滤器以及登录获取和接口校验token的场景。
摘要由CSDN通过智能技术生成

在后端开发中,实现每个用户的鉴权控制是我们要去考虑的,今天给大家分享一下基于JWT的token的鉴权机制。基于token的鉴权机制,它不需要在服务端去保留用户的认证信息或者会话信息。不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

流程上是这样的:

用户使用用户名密码来请求服务器

服务器进行验证用户的信息

服务器通过验证发送给用户一个token

客户端存储token,并在每次请求时附送上这个token值

服务端验证token值,并返回数据

1.新建一个特性,用于允许未通过身份验证也可以访问的特性

public class SkipAttribute : Attribute, IFilterMetadata
{
        ///允许未通过身份验证也可以访问的特性
}

2.新建一个筛选过滤器

我们通过过滤器来判断请求头中是否有允许未通过身份验证也可以访问的特性,如果有允许未通过身份验证访问的特性,直接进入到下个管道,如果没有则验证token。

    public class ApiAuthorize : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            //1.判断是否需要校验
            var isDefined = false;
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
            if (controllerActionDescriptor != null)
            {
                isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
                   .Any(a => a.GetType().Equals(typeof(SkipAttribute)));
            }

            if (isDefined)
            {
                return;
            }

            var token = context.HttpContext.Request.Headers["Auth"].ToString();    //ajax请求传过来
            string pattern = "^Bearer (.*?)$";
            if (!Regex.IsMatch(token, pattern))
            {
                context.Result = new ContentResult { StatusCode = 401, Content = "token格式不对!格式为:Bearer {token}" };
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值