app接口设计之signature签名的php实现
来源:互联网 发布:win8.1配置java环境 编辑:程序博客网 时间:2024/05/20 00:10
app接口设计之signature签名的php实现
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); }
1 0
- app接口设计之signature签名的php实现
- app接口设计之signature签名的php实现
- app接口设计之signature签名的php实现
- app接口设计之token的php实现
- app接口设计之token的php实现
- app接口设计之token的php实现
- app接口设计之token的php实现
- app接口设计之token的php实现
- Android app开放接口API安全性之Token签名Sign的设计与实现
- app开放接口签名设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- App开放接口api安全性—Token签名sign的设计与实现
- linux的目录以及作用
- HDU 1016 Prime Ring Problem
- 为RecyclerView打造通用Adapter 让RecyclerView更加好用
- 第十二周 求两数的最大公约数
- 盗版毕加索
- app接口设计之signature签名的php实现
- 十一章 上机1
- Asp.net MVC 利用(aspose+pdfobject.js) 实现在线预览word、excel、ppt、pdf文件
- samba 安装记录
- LitePal总结
- 十二章 未完
- as2.2 反射碰到的一个问题
- HashMap 详解
- 用户输入不期望的输入