Api接口签名规则

 

公共传递参数json

参数名后端

类型服务器

必选app

描述函数

app_id string 调用方身份ID,接口提供方用此来识别调不一样的调用者,该参数是API基本规范的一部分,请详见API公共规范。
sign_type string 签名类型:MD5,RSA2

sign编码

string排序

是 token

一次接口调用的签名值,服务器端 “防止 假装请求/防篡改/ 防重发” 识别的重要依据。接口

timestamp字符串

Int

时间戳(long Timestamp = DateTime.Now.Ticks;)

 

method string /user/info.json

 

1.筛选并排序

获取全部请求参数,不包括字节类型参数,如文件、字节流,剔除sign字段,剔除值为空的参数,并按照第一个字符的键值ASCII码递增排序(字母升序排序),若是遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。

2.拼接

将排序后的参数与其对应值,组合成“参数=参数值”的格式,而且把这些参数用&字符链接起来,此时生成的字符串为待签名字符串。

 

3.调用签名函数

使用各自语言对应的SHA256WithRSA(对应sign_type为RSA2)或SHA1WithRSA(对应sign_type为RSA)签名函数利用商户私钥对待签名字符串进行签名,并进行Base64编码。

4.把生成的签名赋值给sign参数,拼接到请求参数中。

 

 

后端代码能够增长一个时间戳的时效性判断,好比时间戳必须是当前时间的先后半小时内(可与token的过期机制一致,若是涉及到资金,可能还要缩短期限制,而且在业务上还要作调整,好比转帐,先生成一个转帐订单,而后再发起一个转帐请求,判断是否已转帐,这样能够防止重复提交攻击,若是是app,还能够增长登陆会话中提交有效),这样能够防止重复提交攻击。

 

 每次请求目标接口前,先使用签名的方法,获取一个验证码(基于会话,这个验证码在服务端的会话中,是一个指定的变量,同一会话,都是从这个变量中取),而后把这个验证码加入到目标接口参数中;由于验证码用事后就会换一个,目标接口请求完后,验证码失效,请求失败,可防止重复提交攻击。

相关文章
相关标签/搜索