在后端开发中,实现每个用户的鉴权控制是我们要去考虑的,今天给大家分享一下基于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}" };