关于.Net WebAPI数据认证(包括登陆认证、模型认证)
1、登陆认证使用WebAPI自动认证
webApi自动认证继承类:AuthorizeAttribute
自动认证类使用在控制器上
- [Authentication]
- public class CardController : BasisController
- {
- }
主要重写二个方法
1、OnAuthorization 在认证的时候自动调用这个方法
2、HandleUnauthorizedRequest 认证失败的时候调用这个方法
- /// <summary>
- /// 自动认证 作者KAI
- /// </summary>
- public class Authentication : AuthorizeAttribute
- {
- /// <summary>
- /// 自动认证
- /// </summary>
- /// <param name="actionContext"></param>
- public override void OnAuthorization(HttpActionContext actionContext)
- {
- //actionContext当前请求的HttpActionContext 可以获取请求的内容
- //actionContext.Response
- //actionContext.Request
- //actionContext.RequestContext
- //也可以这样获取
- //System.Web.HttpContext.Current.Request
- //System.Web.HttpContext.Current.Response
- if (true)
- {
- //成功以后不使用session如何把数据传到对应的Action 设置当前请求的User对象就行了 Action里面有User直接可以用
- // HttpContext.Current.User = new UserModel() { loginUser = new_user }; //设置当前登陆人模型 UserModel是自定义模型
- base.IsAuthorized(actionContext);
- //认证成功调用 接下来会到具体的action里面运行
- }
- else
- {
- this.HandleUnauthorizedRequest(actionContext);
- //认证失败调用
- }
- }
- /// <summary>
- /// 错误返回
- /// </summary>
- /// <param name="actionContext"></param>
- protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
- {
- JsonData jsonData = new JsonData();
- jsonData.state = "";
- jsonData.message = "亲!你还没登陆哪";
- actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
- {
- Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
- };
- }
- }
UserModel模型我用于传递数据到具体的Action
使用 HttpContext.Current.User = new UserModel() { loginUser = new_user }; //设置当前登陆人模型
- public class UserModel : IPrincipal
- {
- public er_wx_user loginUser { get; set; }
- public bool IsInRole(string name)
- {
- return true;
- }
- public IIdentity Identity { get; set; }
- }
2、模型认证
webApi模型认证继承类:ActionFilterAttribute
模型认证类使用在Action上
- [ModelApprove]
- public HttpResponseMessage boundUserPhone([FromBody]boundUserPhone boundUserPhoneModel)
- {
- }
主要重写二个方法
1、OnActionExecuting 模型认证的时候自动调用 webApi上如果用模型接收数据则会自动认证
2、ErrorRequest 认证失败的错误返回
- /// <summary>
- /// 模型字段认证 作者KAI
- /// </summary>
- public class ModelApprove : ActionFilterAttribute
- {
- /// <summary>
- /// 模型认证
- /// </summary>
- /// <param name="actionContext"></param>
- public override void OnActionExecuting(HttpActionContext actionContext)
- {
- //模型认证不通过
- //actionContext.ModelState.IsValid 模型认证是否通过根据模型的规则 自动认证
- if (!actionContext.ModelState.IsValid)
- {
- this.ErrorRequest(actionContext);
- }
- }
- /// <summary>
- /// 错误返回
- /// </summary>
- /// <param name="actionContext"></param>
- protected void ErrorRequest(HttpActionContext actionContext)
- {
- //获取全部的错误模型认证错误的内容全在这个List内
- List<string> errorList = new List<string>();
- foreach (var value in actionContext.ModelState.Values)
- {
- foreach (var error in value.Errors)
- {
- errorList.Add(error.ErrorMessage);
- }
- }
- //下面是错误返回 和自动认证一样写法
- JsonData jsonData = new JsonData();
- jsonData.state = "";
- jsonData.message = errorList.FirstOrDefault();
- jsonData.backData.Add("info", errorList);
- actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
- {
- Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
- };
- }
- }
3、自定义模型认证规则
认证规则使用在模型属性上
- public class addCardLog
- {
- [Required(ErrorMessage = "卡ID不能为空")]
- public int card_id { get; set; }
- }
有一些系统自带的认证规则
所在命名空间 :using System.ComponentModel.DataAnnotations;
- public class addInfo
- {
- [Required(ErrorMessage = "内容不能为空")]
- [StringLength(, MinimumLength = , ErrorMessage = "长度范围1-10")]
- [Range(typeof(string), "", "", ErrorMessage = "类型为1或者2")]
- [RegularExpression(@"^1(3|4|5|7|8)\d{9}$", ErrorMessage = "正则表达式认证错误内容")]
- [Compare("name_two",ErrorMessage ="二次名字不一致")]//内容是否和name_two一样多在认证二次密码 输入是否一致
- public string name { get; set; }
- public string name_two { get; set; }
- }
自定义规则认证
webApi模型认证自定义规则继承类:ValidationAttribute
主要重写一个方法
1、IsValid
- /// <summary>
- /// 验证码检查规则
- /// </summary>
- public class VerifyCodeCheck : ValidationAttribute
- {
- public string phoneString { get; set; }
- /// <summary>
- /// 检查是否通过认证
- /// </summary>
- /// <param name="value"></param>
- /// <returns></returns>
- protected override ValidationResult IsValid(object value, ValidationContext validationContext)
- {
- try
- {
- //value 是认证的属性的值
- //validationContext.ObjectInstance 是当前模型的object 对象可以用反射获取值
- //可能在认证的时候需要别值参与 objectToMap方法把 object对象变成键值对对象
- var phone = CommonHelper.objectToMap(validationContext.ObjectInstance)[phoneString].ToString();
- if (CacheHelper.Get(phone).ToString().Equals(value.ToString()))
- {
- return ValidationResult.Success;
- }
- return new ValidationResult(base.ErrorMessage);
- }
- catch
- {
- return new ValidationResult("验证码失效或者错误");
- }
- }
- }
- }
反射获取object对象的公共属性和值
- /// <summary>
- /// 对象转Map集合 利用反射
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- public static Dictionary<string, object> objectToMap(object obj)
- {
- try
- {
- if (obj == null) throw new Exception();
- Dictionary<string, object> map = new Dictionary<string, object>();
- foreach (var attribute in obj.GetType().GetProperties()) //反射获取属性列表
- {
- map.Add(attribute.Name, attribute.GetValue(obj));
- }
- return map;
- }
- catch
- {
- return null;
- }
- }
源码链接: https://pan.baidu.com/s/1dEHWkut 密码: 29qr
关于.Net WebAPI数据认证(包括登陆认证、模型认证)的更多相关文章
- C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...
- WebApi身份认证解决方案:Basic基础认证
前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...
- C#进阶系列——WebApi身份认证解决方案:Basic基础认证 (转)
http://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人 ...
- WebApi 身份认证解决方案:Basic基础认证
前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...
- (转)C# WebApi 身份认证解决方案:Basic基础认证
原文地址:http://www.cnblogs.com/landeanfen/p/5287064.html 阅读目录 一.为什么需要身份认证 二.Basic基础认证的原理解析 1.常见的认证方式 2. ...
- #进阶系列——WebApi 身份认证解决方案:Basic基础认证
阅读目录 一.为什么需要身份认证 二.Basic基础认证的原理解析 1.常见的认证方式 2.Basic基础认证原理 三.Basic基础认证的代码示例 1.登录过程 2./Home/Index主界面 3 ...
- ASP.NET WebApi 基于OAuth2.0实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将是我们需要思考的问题.为了保护我们的WebApi数 ...
- ASP.NET Core WebApi基于Redis实现Token接口安全认证
一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebSer ...
- 频率类组件-认证规图分析-JWT认证-drf-jwt插件
频率类源码 # 1)APIView的dispath方法中的 self.initial(request, *args, **kwargs) 点进去 # 2)self.check_throttles(re ...
随机推荐
- 亿级PV请求的三种负载均衡技术(转)
http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml 目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...
- 常用linux基础命令(持续更新...)
删除 空目录 rmdir非空目录 rm -rf 目录名字-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 删除文件命令rm -f 文件名将会强行删除文件,且无提 ...
- 最短路【洛谷P1841】 [JSOI2007]重要的城市
P1841 [JSOI2007]重要的城市 题目描述 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向 ...
- linux 内核的 switch_to原理
switch_to:这是一个宏,有三个参数prev,next,last 局部变量prev,next:指向进程描述符的内存地址 首先明确的是:last和prev是同一个,用last只是为了理解方便,完全 ...
- 提交表单存在html标签报错-检测到有潜在危险的 Request.Form 值
1..aspx页面 在.aspx文件头中加入这句<%@ Page validateRequest="false" %> 2.通用方法 修改web.config文件, & ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)
题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...
- idea 新建maven项目没有src及其子目录问题
注意在这一步中,填写maven的本地地址还有手动修改settings地址非常重要!!! 如果你是第一次配置maven,少配置任何一个将导致你以后建立的mvn项目全部没有src目录!!! 解决办法就是卸 ...
- 复习一知识点:回调函数callback
比如我们常用的异步请求: $.ajax({ url:"test.json", type: "GET", data: {username:$("#use ...
- Oracle 11g服务OracleDBConsoleorcl启动失败(异常或报错)
OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl.在运行Enterprise Manager(企业管理器OEM)的时候,需要 ...
- DokanLibrary 卸载
如果不小心安装了旧版...请卸载 在 c 盘中搜索 doken 其中有一个文件叫dokan.sys 它在C:\Windows\System32\drivers 文件夹中...放心删掉之.. 太坑了 ...