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防盗链是 ...
随机推荐
- Linked dylibs built for GC-only but object files built for retain/release for architecture x86_64
编译开源Xcode 插件 SCXcodeSwitchExpander 源码地址: https://github.com/stefanceriu/SCXcodeSwitchExpander 编译环境:X ...
- iOS - push 或 pop或点击导航栏返回pop指定导航控制器
以前一直有个很疑惑的问题没有搞清楚 关于ios中 viewcontroller的跳转问题,其中有一种方式是采用navigationController pushViewController 的方法,比 ...
- PostgreSQL+pgpool-II复制方案
目录 PostgreSQL+pgpool-II复制方案 1. Pgpool-II介绍 2. pgpool-II安装 2.1 安装pgpool-II yum源,并安装pgpool-II 2.2 添加Pg ...
- linux 下 nginx的负载均衡
nginx是如何实现负载均衡的,nginx的upstream目前支持以下几种方式的分配: 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2 ...
- php代码执行顺序
从上往下,调用类里面的方法,类放上面,调用在下面
- com.opensymphony.xwork2.config.ConfigurationManager.addConfigurationProvider
一月 31, 2016 5:06:31 下午 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting f ...
- servlet填充Response时,数据转换之content-type
在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值. 1. ...
- 2018.09.25 51nod1597 有限背包计数问题(背包+前缀和优化)
传送门 dp好题. 我认为原题的描述已经很清楚了: 你有一个大小为n的背包,你有n种物品,第i种物品的大小为i,且有i个,求装满这个背包的方案数有多少. 两种方案不同当且仅当存在至少一个数i满足第i种 ...
- 2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)
传送门 给出一个二维平面,给出若干根线段,求出x" role="presentation" style="position: relative;"&g ...
- nexus 参考文档
参考文档: http://books.sonatype.com/nexus-book/reference/index.html E:\e\nexus\nexus-2.12.0-01\conf\nexu ...