Au api是一个基于Au框架 实现的api安全框架,支持token认证、防拦截、参数签名以及数据加密等,适用于任何基于servlet的web项目, 如Spring, Spring Boot 等等。
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
<!-- 使用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-example
框架提供公共参数如下:
time: 请求发起时间戳salt: 盐值sign: 参数签名值data: 具体接口参数的json字符串进行加密后的字符串
使用者可自行添加所需要的公共参数,如设备号deviceId、 版本号version、版本code等,只需继承ApiParams并告知框架自定义的参数类即可。
对于Content-Type,POST请求可支持application/json与application/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¶m2=param2_value¶m3=param3_value&key=secrt_key
sign = md5(str).toUpperCase()
伪代码关键说明如下:
secrt_key为密钥,需要服务端提供;- 签名串
str中的参数param需要按参数名升序排列; - 参数值为空的参数不参与签名;
接口交互中,框架会对请求和返回数据中data参数会进行加解密操作,可支持AES-ECB和DES3-ECB两种对称加密算法。
加密伪代码如下:
data = base64_encode(encrypt( md5(salt + secrt_key), data_json))
解密伪代码如下:
json_data = decrypt(md5(salt + secrt_key), base64_decode(data))