c# 自定义验证登录(Authorize)
程序员文章站
2022-06-21 19:57:25
我们的项目本来是用azure的auth认证,是用过程中发现登录速度太慢了,所以还是自己搞一个吧,没想到搞起来挺简单的,不是用一个专门的认证服务器哈,就是一个简单的工具类。 验证是否登录的类 使用 登录接口数据缓存处理,获取到用户信息后,生成guid作为token,每次登录都会重新生成token,返回 ......
我们的项目本来是用azure的auth认证,是用过程中发现登录速度太慢了,所以还是自己搞一个吧,没想到搞起来挺简单的,不是用一个专门的认证服务器哈,就是一个简单的工具类。
验证是否登录的类
/// <summary> /// 认证类继承 /// </summary> public class requestauthorizeattribute : authorizeattribute { public override void onauthorization(httpactioncontext actioncontext) { // 是否不需要验证 或者 已经登录 if (skipauthorization(actioncontext) || islogin(actioncontext)) return; actioncontext.response = getresponse(); } /// <summary> /// 返回信息接口 /// </summary> private httpresponsemessage getresponse() { var response = serviceresponse<bool>.warningresponse(401, commonconst.msg_nologin, false); return jsonhelper.tohttpresponsemessage(response); } /// <summary> /// 判断是否匿名使用接口 /// </summary> private static bool skipauthorization(httpactioncontext actioncontext) { if (!actioncontext.actiondescriptor.getcustomattributes<allowanonymousattribute>().any<allowanonymousattribute>()) return actioncontext.controllercontext.controllerdescriptor.getcustomattributes<allowanonymousattribute>().any<allowanonymousattribute>(); return true; } /// <summary> /// 是否已经登录 /// </summary> private bool islogin(httpactioncontext actioncontext) { var authorization = guid.empty.tostring(); // md5值 if (actioncontext.request.headers.authorization != null) { authorization = actioncontext.request.headers.authorization.tostring(); } var user = operatorprovider.provider.getcurrent(authorization); return user != null; } }
使用
登录接口数据缓存处理,获取到用户信息后,生成guid作为token,每次登录都会重新生成token,返回给请求来源,web端只保存token值即可,每次请求的时候把token放到header里面。
baseapicontroller处理,获取header里面的token值,把用户信息放到缓存里面,从缓存中获取后放到基类里面的model中,子类都可以使用用户信息。
[requestauthorize] public class baseapicontroller : apicontroller { /// <summary> /// 当前用户信息实体 /// </summary> public operatormodel currentusermodel { get { var values = httpcontext.current.request.headers.getvalues("authorization"); var authorization=guid.empty.tostring(); if (values != null && values.length > 0) authorization = values[0]; var currentusermodel = operatorprovider.provider.getcurrent(authorization); if (currentusermodel == null) { currentusermodel = new operatormodel { loginname = "admin" }; } return currentusermodel; } } }
上一篇: 花菜的热量高不高呢