app接口设计之signature签名的php实现
app接口设计之signature签名的php实现
ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器
1、首先说一句什么是接口:接口简单来说就是服务器端用来返回给其他程序或者客户端数据的桥梁
2、接口的作用:根据固定参数返回固定数据,比如客户端传a=1,那么服务器端返回a的姓名,客户端传a=2,服务器端返回a的性别,而不会返回其他数据。
3、signature签名的作用:保证接口与数据的安全
4、token的作用:和PC登陆的session一样,作为用户进入的唯一票据
例如:app与服务器端的接口、java与php之间不同程序的接口,这些接口一般通过json格式传输数据
所以为了保证移动端和服务端数据传输相对安全,需要对接口进行加密传输
接口签名验证固定参数:接口签名验证固定参数是客户端调用所有接口时都需要传递的参数。用于接口版本管理(旧版本的安卓app依然可以使用)、安全校验等目的。os String 客户端操作系统名称 例如"android", "ios"uuid String 移动设备唯一标识符 例如安卓手机的IMEI,苹果手机的UUIDversion String 客户端版本号 例如"1.0","2.0"(接口设计高版本接口要兼容低版本的接口)timestamp long 客户端调用接口时的时间戳signature String 客户端接口调用签名签名算法Ps: (可以根据实际变更其他算法使用)对除去signature外的所有参数,按参数名的字典顺序排序后计算sha1值。例如,某个接口的参数"mobile=18600933630&verifyCode=135466&os=android&uuid=GB1303EA&version=1.0×tamp=1442067125464"a) 按参数名的字典顺序排序成 "mobile=18600933630os=androidtimestamp=1442067125464uuid=GB1303EAverifyCode=135466version=1.0"b) signature值为字符串"mobile=18600933630os=androidtimestamp=1442067125464uuid=GB1303EAverifyCode=135466version=1.0"的sha1值注意:简而言之,签名设计的原则就是保证服务器所接收到的数据是自己的APP端传过来的,而不是其他人非法调用的,在APP端给签名加密时需要加上特有固定参数,服务器也是加上特有固定参数,从而来保证一对一的传输,每个接口都需要调用该签名验证方法本项目实现签名及其验证的具体代码(php实现):(1)签名的验证方法代码:// $signtype 'yes':验证,'no':不验证public static function checkSign($args,$signature,$signtype = 'yes'){if($signtype == 'no') //上线时去除该部分,必须验证签名{return true;}if(!$args || !$signature){return false;}if (time() - $args['timestamp'] > 300) //同一签名调用时间限制{return false;}$args['xiaoming'] = 'wuyingqi431'; //特有固定参数ksort($args); //按数组的键排序$sign = '';foreach($args as $k => $v){$sign .= $k . '=' . $v;}$sign = sha1($sign); //加密if($sign == $signature){return true;}return false;}(2)签名验证方法调用(其他必须传的固定参数也需要加入到$args数组当中):$args = $res = array();
//下面是每个接口的参数(分为固定参数和不固定参数,固定参数必传)
$args['mobile'] = r_get('mobile');//下面是签名固定参数$args['os'] = $_POST['os'];$args['uuid'] = $_POST['uuid'];$args['version'] = $_POST['version'];$args['timestamp'] = $_POST['timestamp'];$signature = $_POST['signature'];$signtype = $_POST['signtype'];$check = appuser::checkSign($args,$signature,$signtype);if(!$check){$res['msg_code'] = 99999; //签名错误v_json($res);}
app接口设计之signature签名的php实现相关推荐
- 某音乐App 抓包和signature签名分析
一.目标 李老板:奋飞呀,最近我想下个歌,现在听歌软件都这么顽固了,包都抓不到? 奋飞:抓不到包的原因太多了,咱们得用排除法分析下. 某音乐App 10.8.4 二.步骤 排查协议 李老板也跟我们混了 ...
- APP架构设计经验谈:接口的设计
APP架构设计经验谈:接口的设计 原创文章,转载请注明:转载自Keegan小钢并标明原文链接:http://keeganlee.me/post/architecture/20160107微信订阅号:k ...
- C# 微信JS-SDK之config接口注入权限验证invalid signature签名错误
文章目录 1.开发环境 2.我的代码 3.问题描述 4.问题分析 5.问题根源 6.解决办法 记一次使用微信JS-SDK分享接口,config接口注入权限验证失败, 提示invalid signatu ...
- 接口设计中,如何封装对json格式的数据签名
目录 一.背景介绍 二.遇到的问题 三.解决方案 1.设计一个HttpServletRequestWrapper 2.设计一个filter 四.其他辅助设计 1.定义一个注解 2.定义一个拦截器 一. ...
- 腾讯技术分享:微服务接口设计原则
来源|腾讯技术工程(ID:Tencent_TEG) 本文结合自身后台开发经验,从高可用.高性能.易维护和低风险(安全)角度出发,尝试总结业界常见微服务接口设计原则,帮助大家设计出优秀的微服务. 1.前 ...
- API的 Signature(签名)Token(令牌) 认证
2019独角兽企业重金招聘Python工程师标准>>> Signature认证 一次性的身份校验方式,常见于不同项目间的api通信 一般形式是通过 AppID/AppSecret 及 ...
- PHP:APP接口开发
环境简介 LNMP 1.Linux 2.Nginx 3.MySQL 4.PHP APP接口 客户端与服务端数据的交换 HTTP通讯三要素 1.URL 地址 2.Method 方式 3.Params 内 ...
- JAVA接口设计篇:这些都不知道,别说你懂接口设计
背景 昨天测试提醒有个功能报错了,我看了下,发现接口有过更新. 然后顺便问了下开发同学,确实有更新. 他们的更新是把现有的接口进行了修改. 导致返回的数据结构变更了,以至于接口直接报错. 其实负责后端 ...
- 基于android的生日小助手,毕业答辩-基于Android的生日管家App的设计与实现
基于Android的生日管家软件 绪论 总结 软件设计和实现 目录 数据库 后台设计和实现 课题要解决的问题 课题来源和价值 我的App与市面上App对比 随着社会的发展 生活节奏加快 工作繁忙的商务 ...
最新文章
- word2vec应用场景_Embedding在腾讯应用宝的推荐实践
- 前松后紧和前紧后松——想起PM的点滴
- struts2标签集
- 今天的编程语言是怎么来的?
- CUBA平台–新的Java企业应用程序框架
- java程会释放锁join_关于join() 是否会释放锁的一些思考
- Linux io内存存在的意义~
- Flink 1.12 CDH 6.3 集成
- abstract类中不可以有private的成员_C++中public、protected、private的区别
- 玩转Spring——Spring IOC/DI
- 使用TensorFlow.js的AI聊天机器人一:检测文本中的情绪
- Android Studio 利用系统签名打包apk
- 微信小程序的开发流程有哪些?
- linux中的rar文件怎么打开方式,linux下怎么解压缩rar文件教程
- 05流量管理原理-3金丝雀TCP流量整形比例分配
- 图像处理/计算机视觉/python环境下如何用滤波器、算法恢复图片,对图片去污【附代码】
- java如何枚举定义一个数组_Java中如何将字符枚举类变成一个数组
- 我的新博客地址https://xmmup.com
- 莫烦pytorch CNN卷积神经网络
- 仁慈的独裁者——Python之父吉多·范罗苏姆