介绍

  • 对接别人接口或者别人对接自己接口时,很多时候都要进行接口的验签
    • 我的理解是
      • 防止参数被篡改
      • 自己已的加密方式可以进行身份的识别
  • 满足了以下功能

    没有做时间处理,一次数据的加密可以一直使用

    • 对接口进行 MD5 ,SHA 加密验签
      • SHA的params还没有验证过
      • SHA的加密有效性还没有验证过
    • 满足验签参数存放在 header 中
    • 满足验签参数存放在 params 中

      必看

      加密数据格式

      2.0.3 之前的版本使用postman等工具调用时不能进行json格式化处理,2.0.3开始支持

headers中传输sign

统一为JSON字符串

  • {“age”:”1”,”name”:”tan”}
  • [{“age”:”1”,”name”:”tan”},{“age”:”2”,”name”:”tan2”}]

params中传输sign

get拼接的格式

  • age=1&name=tan

加密顺序

  1. 接口传参顺序必须跟加密的顺序一致

    MD5盐

    默认为 : MD5database

自定义

配置文件中设置

  1. jdevelops.apisign.salt=ASDF

引入依赖

  1. <dependency>
  2. <groupId>cn.jdevelops</groupId>
  3. <artifactId>aops-apisign</artifactId>
  4. <version>2.0.2</version>
  5. </dependency>

使用

  • @Signature注解形式无需额外配置(自定义盐请参考看上面☝)
    • cn.jdevelops.apisign.annotation.Signature
  • 参数名:sign

    1. // 使用示例
    2. @PostMapping(value = "/isSignMD5BeanPJsonH")
    3. @Signature(type = SginEnum.MD5HEADER)
    4. public ResultVO isSignMD5BeanPJsonH(@RequestBody UserEntity userEntity) {
    5. System.out.println("userEntity.toString() = " + userEntity.toString());
    6. return ResultVO.successForData(userEntity);
    7. }

    密钥设置形式有二种

    Headers

    统一在headers

    • image.png

      Params

      跟着参数走

image.png
image.png
image.png

加密方式也有两种

MD5

MD5在线加密 32位小写加密

第一步

将需要加的数据进行MD5加密
image.png

第二步

将第一步得到的加密串跟着盐一起在加一次密

image.png

最后一步进行请求接口

headers中加入 sign 的参数

image.pngimage.png

SHA

单元测试中测试了下,未仔细测试

参数加密注意

  1. json 参数加密时不要有空格和换行(即格式化),要不然会有问题
    1. ##
    2. {
    3. "age": 1,
    4. "name": "tn"
    5. }
    6. ##
    7. {"age":1,"name":"tn"}

其他功能

自定义返回错误认证格式

2.0.6 开始不在默认集成 apis-exception 所以下面的功能需要自己集成apis-exception后生效,或者自己自定义自己的全局异常处理器

示例项目地址

https://github.com/en-o/Jdevelops-Example/tree/main/ApiSign

测试用例

https://github.com/en-o/Jdevelops-Example/tree/main/ApiSign/src/test/java/cn/tannn/apisign/controller

postMan请求样例

https://test123test654.postman.co/workspace/f4d20d65-b063-495e-b365-b2d47844389e/folder/5878647-35cb3b62-7eb8-4416-8a3e-c8bd6957cc98

  1. // 验证MD5加密 - post json header
  2. POST /header/md5/isSignMD5BeanPJsonH HTTP/1.1
  3. Host: localhost:8080
  4. sign: 9bb8396222ad5472b13785d90f11bc90
  5. Content-Type: application/json
  6. Content-Length: 24
  7. {"age":"1","name":"tan"}