webAPI过滤器添加参数签名
项目需求:
接口对安卓和IOS开发接口,需要房子用户窜改数据请求接口。添加sign签名校验参数。
代码如下:加上特性标签就可以控制部分接口验证
public class SignAuthorizeFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext filterContext)
{ var actionList = filterContext.ActionDescriptor.GetCustomAttributes<EncryptDataAttribute>();
var controllList = filterContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<EncryptDataAttribute>(); if (actionList.Any()|| controllList.Any())
{
string key = ConfigSection.Get("Key");
if (!string.IsNullOrWhiteSpace(key))
{
var result = new AjaxResCode();
//1.验证入参
string token = HttpContext.Current.Request.Params["token"];
string appkey = HttpContext.Current.Request.Params["appkey"];
string timestamp = HttpContext.Current.Request.Params["timestamp"];
string digest = HttpContext.Current.Request.Params["digest"];
string v = HttpContext.Current.Request.Params["v"]; if (string.IsNullOrWhiteSpace(token) ||
string.IsNullOrWhiteSpace(appkey) ||
string.IsNullOrWhiteSpace(timestamp) ||
string.IsNullOrWhiteSpace(digest) ||
string.IsNullOrWhiteSpace(v))
{
result.Message = "请求非法。。。。!";
result.ResultCode = (int)ResultCode.Nopermit;
filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.OK, result);
} NameValueCollection coll = HttpContext.Current.Request.Form;
StringBuilder paramStr = new StringBuilder(); var keys = new List<string>();
foreach (string param in coll.Keys)
{
if (!string.IsNullOrEmpty(param))
{
keys.Add(param.ToLower());
}
} keys.Sort();
foreach (string p in keys)
{
if (p != "digest")
{
if (!string.IsNullOrEmpty(coll[p]))
{
paramStr.Append(coll[p]);
}
}
}
paramStr.Append(key);
if (DESEncrypt.MD5ToUpper(paramStr.ToString()) != digest)
{
result.Message = "请求非法!。。。。。";
result.ResultCode = (int)ResultCode.Nopermit;
filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.OK, result);
}
}
} base.OnActionExecuting(filterContext);
} }
webAPI过滤器添加参数签名的更多相关文章
- [置顶]
webapi token、参数签名是如何生成的
一个问题 在这里我想问大家一句,如果你向一个刚刚接触.net web后端程序开发的同学(别人刚刚也就学了webform的request,response,会提交表单的这种刚接触不久的同学),你怎么去解 ...
- webapi token、参数签名是如何生成的(转载)
API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数不能被篡改4.请求的有效时间 在刚接触接口开发时,可能脑子里压根就没有这个接口调用安全性的原则,但常识性的经验告诉我们,每一个请 ...
- WebApi安全性 参数签名校验(结合Axios使用)
接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...
- WebApi基于Token和签名的验证
最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...
- C# WebApi 过滤器的使用开发接口必备利器
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- Asp.Net Mvc4 Webapi Request获取参数
最近用mvc4中的WEBAPI,发现接收参数不是很方便,跟传统的request.querystring和request.form有很大区别,在网上搜了一大圈,各种方案都有,但不是太详细,于是跟踪Act ...
- RDLC中添加参数,用来显示报表中数据集之外的信息。
我添加了两个参数,首先后台: ReportParameter rp = ,,).ToString()); ReportParameter rp1 = new ReportParameter(" ...
- c#数据绑定(4)——向查询中添加参数
本实例主要练习了ADO.Net 连接到外部数据库的基础上,向查询中添加参数.使用的是ACCESS数据库. 在ACCESS数据库中可以用MSSQL的形式定义操作字符串,也可以采用OLEDB的形式. MS ...
- 在VS中向命令行添加参数的方法
在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ...
随机推荐
- require()和include()代码重用
第五章 require()函数和include()函数几乎是相同的,二者唯一的区别在于函数失败后,require()函数将给出一个致命的错误,而include()只是给出一个警告. require_o ...
- Blender 工具使用——显示键盘和鼠标操作
Blender 工具使用--显示键盘和鼠标操作 Blender自己本身就带有显示按键和鼠标的功能,就是3D View: Screencast Keys插件. 打开 File(文件) -> Use ...
- Zbar和Z*算法对比
博客转载自:https://blog.csdn.net/qishandaxue/article/details/45481387 移植zbar和zxing源码到linux平台,zbar移植的是C源码, ...
- Win10 VS2013 suitesparse-metis-for-windows 1.3.1
suitesparse-metis-for-windows 1.3.1 安装包内附SuiteSparse 4.5.1, Metis 5.1.0和 lapack 3.4.1 Github上面由整理好的s ...
- 505C Mr. Kitayuta, the Treasure Hunter
传送门 题目大意 一共有30000个位置,从第0个位置开始走,第一次走k步,对于每一次走步,可以走上一次的ki+1 ,ki ,ki-1步数(必须大于等于1),每个岛上有value,求最大能得到的val ...
- scala中同步块
private def initializeIfNecessary() { if (!Logging.initialized) { Logging.initLock.synchronized { if ...
- 数据库(学习整理)----6--Oracle如何快速备份和多次备份数表数据
1.说明: 这里假设一种应用场景! 假设,银行系统中有大量的数据需要及时备份,如何才能快速高效呢! 条件需求: (1).不能设置同步锁(设置的会影响银行正常业务进行!使得银行系统处于维护状态,这是不 ...
- [译]如何在visual studio中调试Javascript
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- C# 顺序表---增删改查--逆至--删除最小值
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- SQLServer存储引擎——01.数据库如何读写数据
一.引言 在SQL Server数据库中,数据是如何被读写的?日志里都有些什么?和数据页之间是什么关系?数据页又是如何存放数据的?索引又是用来干嘛的? 一起看看SQL Server的存储引擎. 二.S ...