公共平台API鉴权安全验证

api使用签名+时间戳鉴权
请求api接口格式:/api/testserver?appid=xxx&sign=12AA12SD123SD1DSSA&timestamp=1511332935&key1=value1&key2=value2...

参数解释:
appid: 由服务端分配唯一标示id 必传 确认访问身份
timestamp:当前时间戳 必传 确保访问实效性(10位的秒级时间戳)
sign:签名 必传 验证接口安全防止被劫持修改参数

notice:随机数                          必传 防止接口重复提交



签名生成规则:
所有请求参数(包括appid,时间戳,随机数   ) 根据key值的字母升序排序后,以key1value1key2value2。。。的方式连接在 最后加上secretKey(由服务端分配唯一的加密参数,ps:不参与通信)组成的字符串
使用MD5加密转为大写得到sign(签名)

因为secretKey在求情过程中不参与通信,服务端通过对sign的 校验就可以防止接口被劫持修改参数,再加上时间戳保证接口的实效性。

服务端验证签名和时间戳有效后,将sign和notice存入缓存。


请求实例:
如要请求的api为 /api/getUserWalletInfo
api需要传的参数为:userId

step1:生成时间戳 String timestamp= String.valueOf(new Date().getTime() / 1000); // 当前时间的时间戳
step2: 根据参数生成sign
String sb= appidxxxtimestamp1511332935userId1000secretKey
然后对sb进行md5加密转为大写 得到sign
step3:组合访问参数进行http请求:/api/getUserWalletInfo?appid=xxx&sign=12AA12SD123SD1DSSA&timestamp=1511332935&notice=2332&userId=100


服务端验证逻辑:

先验证appid是否合法(不合法返回400),时间戳是否有效(过期返回400),缓存中sign对应的notice是否存在(如果存在代表重复提交,如果不存在将sign和notice存入缓存。),再验证sign时候正确(不正确返回400)


签名生成与校验移步点击打开链接







  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值