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))