Skip to content

Au api是一个基于Au框架实现的api安全框架,支持token认证、防拦截、参数签名以及数据加密等,适用于任何基于servlet的web项目,如Spring, Spring Boot

License

lazycece/au-api

Repository files navigation

Au Api

Maven Central License GitHub release

Au api是一个基于Au框架 实现的api安全框架,支持token认证、防拦截、参数签名以及数据加密等,适用于任何基于servlet的web项目, 如Spring, Spring Boot 等等。

Environment

Au API 环境依赖如下:

Au API Java Servlet Api
1.x 1.8+ javax.servlet-api:>=4.0.0
2.x 17+ jakarta.servlet-api:>=5.0.0

如何使用?

spring boot项目请移步au-api-spring-boot

Maven Dependency

 <!-- 使用SNAPSHOT版本时请添加sonatype仓库 -->
 <repositories>
    <repository>
      <id>sonatype</id>
      <name>sonatype</name>
      <url>https://oss.sonatype.org/content/groups/public</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
  </repositories>

  <dependency>
    <groupId>com.lazycece.au</groupId>
    <artifactId>au-api</artifactId>
    <version>${au-api.version}</version>
  </dependency>

Au api集成

请直接查看使用样例 au-api-example

框架说明

请求参数

框架提供公共参数如下:

  • time: 请求发起时间戳
  • salt: 盐值
  • sign: 参数签名值
  • data: 具体接口参数的json字符串进行加密后的字符串

使用者可自行添加所需要的公共参数,如设备号deviceId、 版本号version、版本code等,只需继承ApiParams并告知框架自定义的参数类即可。

对于Content-TypePOST请求可支持application/jsonapplication/x-www-form-urlencoded;而如果需要采用multipart/form-data协议上传文件时,文件参数可与公共参数同级。

返回参数

对于接口返回参数,框架只负责加密,而将决定权交给了使用者,方便更友好的集成使用。

用户鉴权

框架在接口调用时会通过校验token进行用户鉴权,用于判断用户是否登陆、会话是否过期以及是否是非法调用等等,所以接口调用均需在请求Headers中附上用户的token。 在会话控制中,token会默认在每次请求完成后刷新,当然token也会失效,默认其有效时间是30分钟。使用者可自行更改token相关信息,如header名、有效时长等。

由于框架提供的token是基于JWT的无状态的token,所以token存在被伪造的风险。如果使用者对token的安全性有更高的要求,可以自行再对token中的内容进行 二次安全验证。

防拦截

框架在每次接口请求会对time参数进行校验,防止被请求被拦截篡改,从发起请求到收到请求之间时间间隔默认不超过3分钟,可自行更改。

签名验证

框架在接口交互时会进行签名验证,签名sign动态生成方式伪代码如下:

str = param1=param1_value&param2=param2_value&param3=param3_value&key=secrt_key
sign = md5(str).toUpperCase()

伪代码关键说明如下:

  • secrt_key为密钥,需要服务端提供;
  • 签名串str中的参数param需要按参数名升序排列;
  • 参数值为空的参数不参与签名;

数据加解密

接口交互中,框架会对请求和返回数据中data参数会进行加解密操作,可支持AES-ECBDES3-ECB两种对称加密算法。

加密伪代码如下:

data = base64_encode(encrypt( md5(salt + secrt_key), data_json))

解密伪代码如下:

json_data = decrypt(md5(salt + secrt_key), base64_decode(data))

License

Apache-2.0

About

Au api是一个基于Au框架实现的api安全框架,支持token认证、防拦截、参数签名以及数据加密等,适用于任何基于servlet的web项目,如Spring, Spring Boot

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages