API接口加密

1,632 阅读2分钟

API安全性

防止被其他人随意调用

  1. appKey & signKey
    1. 通过appKey标识不同调用方,利用signKey和传入参数加密生成sign
    2. 加密方式:
      1. 通过RSA算法非对称加密,公钥给客户端加密,服务端用私钥解密
      2. MD5
  2. JWT & 白名单
    1. 服务器配置ip白名单
    2. 用户发送用加密的sign等参数给服务器验证登录,验证通过后返回token
    3. 客户端保存token,后续在发起请求时,再用signKey加密token
    4. 服务端加密之后,校验token是否有效,并判断host是否在白名单内

防止请求参数被篡改

  1. 使用签名算法 根据参数名称的ASCII码表的顺序排序,拼接生成字符串,加上特定的appSecret,使用签名算法进行摘要, 之后生成固定长度的字符,具体参考淘宝开发平台的签名算法

防止中间人替换返回的结果

  1. 服务端返回同样的签名,客户端验签
    1. 客户端按照一定规则生成签名,并把签名所需的参数一起传给服务端,服务端把传过来的参数, 按照客户端那样生成签名,和返回内容一起返回给客户端
    2. 客户端再校验是否符合规则,符合则说明未被替换

防重放

  1. timestamp & nonce & sign
    • 客户端 timestamp当前时间戳加上约定好的数,用md5加密成随机数nonce,和sign 发送给服务端
    • 服务端
      1. 先验证sign签名是否合理,证明请求参数没有被中途篡改

      2. 验证timestamp是否过期,是否在过期时间内发出,验证通过

      3. 再去缓存redis中查找是否有key为nonce:{nonce}的string

      4. 如果没有,则创建这个key,把这个key失效的时间和验证timestamp失效的时间一致