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防盗链是 ...
随机推荐
- PAT 1079 延迟的回文数(代码+思路)
1079 延迟的回文数(20 分) 给定一个 k+1 位的正整数 N,写成 ak⋯a1a0 的形式,其中对所有 i 有 0≤ai<10 且 ak>0.N 被称 ...
- vue.js vue-cli 中解决 axios 跨域调用的问题
修改 /config/index.js 文件如下: proxyTable: { '/api': { target: 'http://chifan.local', changeOrigin: true, ...
- servlet-servletContext网站计数器
1.在项目中新建文件夹新建文件nums.txt 2.在web.xml文件配置 <servlet> <description>This is the descriptio ...
- 利用ajaxSubmit()方法实现Form提交表单后回调
1. 背景 最近在工作中,需要实现网页端图片上传到FTP服务器的功能.上传文件是用Form表单提交数据的方法向后台传输文件流,在此遇到了一个问题:后台在处理完图片上传功能后,需要向前台回传是 ...
- 2018.10.14 NOIP训练 直线(二分答案+st表+切比雪夫距离转化)
传送门 二分答案好题. 这已经是当年普及组模拟时挖的坑了233. 这道题还是很不错的. 考虑把坐标系转个45度再操作. 为了不爆精度可以直接转切比雪夫距离. 然后就直接二分答案. 其中竖线就按二分的答 ...
- PHP compact函数
$firstname = "Peter"; $lastname = "Griffin"; $age = "41"; $data = comp ...
- python类的继承-1
#!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = ...
- python corrcoef
该函数得到相关系数矩阵. 例子: vc=[1,2,39,0,8] vb=[1,2,38,0,8] print mean(multiply((vc-mean(vc)),(vb-mean(vb))))/( ...
- 几个CSS-content的小例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MySQL 分表和分区
1.为什么需要分表和分区 在开发的过程中,经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,如果涉及联合查询的情况,性能更加 ...