合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# 签名校验规则 **短说OSX**与开发者之间进行接口交互请求,都会包含签名参数,链接中签名参数的生成,都是通过MD5生成的签名参数,以确保请求安全。 针对开发者提供的接口,开发者需要在相应的接口中进行MD5鉴权,确保请求来源可信。 ### 1.请求有效期校验 请求有效期校验原理如下: OSX向开发者接口发起请求都会以GET方式传递“endtimestamp”参数,该参数标识了请求的有效期。1970-01-01开始的时间戳,秒为单位。 PHP中校验方式如下: ``` <pre class="calibre26"> ``` $endtimestamp=intval($_GET['endtimestamp']); if($endtimestamp&gt;time()){ $this-&gt;apiError('请求超时');//请求超时,不做处理 } ``` ``` ### 2.请求签名校验 将请求参数和appSecret封装成Map集合(如接口文档中无特殊说明,默认除sign外所有请求参数参与签名),按照**参数名**(Key)进行升序排列,将排序后Map集合的参数值(value)拼装成字符串进行MD5签名。其中appSecret在签名中的顺序取决于他在所有参数名中的顺序。 以用户信息获取接口为例: `appKey:testappkey , appSecret:testsecret` 参数列表:`{appKey=testappkey,endtimestamp=1405495206,user_token=213434313,sign=498f48a01afe94853fe8be954bb7bd67}` 签名原串:`testappkeytestsecret1405495206213434313` 签名后字符串:`498f48a01afe94853fe8be954bb7bd67` 签名后字符串和sign做比较,相同则验证通过,不同则验证失败。 PHP中校验方式如下: ``` <pre class="calibre26"> ``` $default_appKey='testappkey'; $default_appSecret='testsecret'; $Map=[ 'appKey' =&gt; $_GET['appKey'], 'appSecret' =&gt; $default_appSecret, 'endtimestamp' =&gt; $_GET['endtimestamp'], 'user_token' =&gt; $_GET['user_token'] ]; $sign = $_GET['sign']; $endtimestamp=intval($Map['endtimestamp']); if($endtimestamp&gt;time()){ $this-&gt;apiError('请求超时');//请求超时,不做处理 } if($Map['appKey']!=$default_appKey){ $this-&gt;apiError('参数错误,秘钥key不正确');//参数错误,秘钥key不正确 } ksort($Map);//$Map按 键 升序排列 $before_md5_sign=implode('',$Map);//拼接$Map为字符串 $after_md5_sign=md5($before_md5_sign);//MD5加密 if($after_md5_sign!=$sign){ $this-&gt;apiError('签名验证不通过');//签名验证不通过 } //签名通过后的后续业务逻辑代码 $data=array(); …… …… $this-&gt;apiSuccess($data); ``` ``` #### 注意: \> 1.签名验证时,如接口参数列表中无特殊说明,必须遍历request请求中的所有参数进行签名验证。 > 短说向开发者发起的请求,也会带上签名,开发者可在提供的api中进行签名验证,确保请求来源可信。 \> 2.示例中$this->apiError("errorInfo");方法是OSX封装的方法,主要实现返回json数据:(开发者需自己处理,保证返回结构中,msg的值为fail,data的值为错误描述) ``` <pre class="calibre26"> ``` {     "code":200,     "msg":"error",     "data":"errorInfo" } ``` ``` \> 3.示例中$this->apiSuccess($data);方法是OSX封装的方法,主要实现返回json数据:(开发者需自己处理,保证返回结构中,msg的值为ok,data的值为要返回的json格式的数据信息) ``` <pre class="calibre26"> ``` {     "code":200,     "msg":"ok",     "data":json_data//这里数组结构的$data在apiSuccess方法中会被处理成json格式 } ``` ``` ## 签名生成工具 为方便开发同学理解签名校验规则,可以使用下面的短说OSX签名工具页面进行校验签名的正确性。地址如下:[签名校验工具](https://osxbe.demo.opensns.cn/commonapi/index/checkTokenSign)