webapi token、参数签名是如何生成的(转载)
API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数不能被篡改4.请求的有效时间
例如这个接口 http://127.0.0.1/api/user/list?type=value 这个获取用户列表信息的请求总不能在地址栏一输入就直接显示信息(虽然有点夸张,不至于阿猫阿狗的信息这么容易get吧),在写webapi接口原则性的基本要求必须得保证数据的安全性和请求的有效性
在这里我就使用Token+参数签名+时间戳 这三个系统参数来办证请求的有效性(即时100%请求有效,也不能说100%也安全了)。
| 参数名 | 必选 | 类型 | 作用 |
| token | 是 | string | 调用方标识,保障其身份是来自本系统认证过的,有效识别用户身份 |
| sign | 是 | string | 接口参数的key,value的记录,防止参数值被篡改,防止伪装请求 |
| timestamp | 是 | int | 时间戳,防止重放攻击 |
那么问题来
1.token 如何生成?作用是什么?
2.参数签名如何生成?作用是什么?
3.时间戳的作用是什么?
看了这篇文章你就知道了。这三个系统参数是如何保证请求的有效性,一定程度上提高数据的安全性
1.token如何生成的?作用是什么?
- [Route("login")]
- public bool login(string account, string pwd)
- {
- var obj = Db.dbUsers.FirstOrDefault(f => f.Account == account && f.Pwd == pwd);
- if (obj != null)
- {
- string token = account.DESEncrypt(desKey);//加密产生token,
- HttpCookie cookie = new HttpCookie(cookieToken,token);
- HttpContext.Current.Response.Cookies.Add(cookie);//保存cookie
- return true;
- }
- else
- {
- return false;
- }
- }
- [Route("list"), HttpGet]
- public List<string> List(string type,string token)
- {
- var obj = Db.dbUsers.FirstOrDefault(p => p.Account == token.DESDecrypt(desKey));
- //验证token
- if (obj != null)
- {
- //返回数据集
- }
- else
- {
- //非法请求
- }
- }
- public class MyFilterAttribute : Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute
- {
- public override void OnActionExecuting(ActionExecutingContext context)
- {
- var request_param = context.ActionArguments.Values;
- var queryCollection = context.HttpContext.Request.Query;
- string account = string.Empty;
- string password = string.Empty;
- long timespan = 0;
- string signature = string.Empty;
- try
- {
- account = queryCollection.Where(p => p.Key == "account").Select(f => f.Value).FirstOrDefault().ToString();
- password = queryCollection.Where(p => p.Key == "password").Select(f => f.Value).FirstOrDefault().ToString();
- timespan = long.Parse(queryCollection.Where(p => p.Key == "timespan").Select(f => f.Value).FirstOrDefault().ToString());
- signature = queryCollection.Where(p => p.Key == "signature").Select(f => f.Value).FirstOrDefault().ToString();
- }
- catch (Exception ex)
- {
- var apiresult = ApiResult<bool>.Error("参数异常"+ex.ToString());
- context.Result = new JsonResult(apiresult);
- }
- //var accountName = context.RouteData.Values["accountName"].ToString()
- var expires_minute = (timespan - DateTime.Now.Ticks) / 60000000000;
- if (expires_minute> 10||expires_minute<-10)
- {
- var apimodel = ApiResult<bool>.Error("请求超时"+expires_minute);
- //var json = JsonConvert.SerializeObject(apimodel);
- JsonResult ret = new JsonResult(apimodel);
- context.Result =ret;
- }
- var ok = ("account" + account + "password" + password).Contains(signature);//ToDO 加密解密
- if (ok == false)
- {
- var apimodel = ApiResult<bool>.Error("非法请求");
- var json = JsonConvert.SerializeObject(apimodel);
- JsonResult ret = new JsonResult(apimodel);
- context.Result = ret;
- }
- base.OnActionExecuting(context);
- }
- }
作者:张林
原文标题:webapi token、参数签名是如何生成的
原文链接:http://blog.csdn.net/kebi007/article/details/72861532
webapi token、参数签名是如何生成的(转载)的更多相关文章
- [置顶]
webapi token、参数签名是如何生成的
一个问题 在这里我想问大家一句,如果你向一个刚刚接触.net web后端程序开发的同学(别人刚刚也就学了webform的request,response,会提交表单的这种刚接触不久的同学),你怎么去解 ...
- WebApi安全性 参数签名校验(结合Axios使用)
接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...
- WebApi基于Token和签名的验证
最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...
- 【转】js生成接口请求参数签名加密
js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...
- js生成接口请求参数签名加密
js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...
- 分享一款一直在维护的【网络开发运维|通用调试工具】: http请求, websocket,cmd, RSA,DES, 参数签名工具,脚本批量生成工具,google动态口令,端口检测,组件注册,js混淆...
首先发下下载地址:https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Test.ex.rar 日常开发,运维,跨部门跨公司对接中. 想快速调 ...
- 防盗链之URL参数签名
一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...
- Token以及签名signature的设计与实现
LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进.这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家. 当初设计这块想达到的效 ...
- 防盗链之URL参数签名 总结
一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...
随机推荐
- 利用Python和webhook实现自动提交代码
最近在为公司书写项目的api文档,计划利用码云的wiki管理整个项目,公司自有git作为项目内容依托,这样全员都可参与,而我定期向码云推送就可以了. 问题 根据需求遇见了这样一个问题:我每次从git上 ...
- OC 三方框架 - SDWebImage
内部实现原理: 1. 下载图片 缓存, 并且需要下载进度 2. 下载图片 : 3.不需要缓存处理的下载 4. 使用GIF 图片使用:图片名字不要加上 .gif 因为内部已经做过处理了 GIF 内部实现 ...
- tp中引入js、css、img的问题
方法一: 直接把js.css.img放到网站公共目录/Public/下. 然后直接在模板文件中使用__PUBLIC__进行替换. 方法二: 在模块配置文件config.php中配置指定的路径,如下: ...
- 什么是maven,jar包的查找过程?
1.什么是maven? Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 2.什么是项目管理工具? 就是SVN.对于SVN的介绍见我的上一篇博客 ...
- Codeforces 607A 动态规划
A. Chain Reaction time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Jmeter报文体包含过大附件导致请求报文发送失败的解决办法
Jmeter中,HTTP request的报文体为一个附件时,如果附件过大,在发送请求报文的时候会失败,办法就是勾选“Use multipart/form-data for POST”
- boost 学习(1)
智能指针的学习 中文教程网站 http://zh.highscore.de/cpp/boost/ 不过代码可能 由于BOOST 版本不同需要稍作修改 scoped_ptr 离开作用域则自动调用类析构函 ...
- JavaScript 静态方法和实例方法
总结: 直接定义在构造函数上的方法和属性是静态的, 定义在构造函数的原型和实例上的方法和属性是非静态的 静态方法: function ClassA(){ //定义构造函数 }; ClassA.fun ...
- Jsp的语法和指令
Jsp的三种注释 前端语言注释:<!-- --> 会被转译,也会被发送,但是不会被浏览器执行 java语言注释: 会被转译,但是不会被servlet执行 Jsp注释:<%-- -- ...
- 2018.09.23 孙悟空大战鲤鱼精(单调队列优化dp)
描述 孙悟空大战鲤鱼精,孙悟空在通天河遇到鲤鱼精,他嫉恶如仇,看见妖精就手痒(忘了自己是妖精).但是鲤鱼精知道孙悟空的厉害,在孙悟空来到通天河,鲤鱼精就跑到了河对面.于是孙悟空就去追鲤鱼精. 我们可以 ...