《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个面向REST API的高性能认证鉴权框架——Sureness。

在主流的前后端分离架构中,如何通过有效快速的认证鉴权来保护后端提供的REST API变得尤为重要。对现存框架,不原生支持RESTful的Apache Shiro, 还是深度绑定Spring的Spring Security,或多或少都不是我们的理想型。
于是乎Sureness诞生了,我们希望能解决这些,提供一个面向REST API,无框架依赖,可以动态修改权限,多认证策略,更快速度,易用易扩展的认证鉴权框架。
功能特性
- 基于 RBAC (用户-角色-资源)主要关注于对 API 的安全保护
- 无特定Web框架依赖(已有 Spring Boot、Quarkus、Javalin、Ktor、Micronaut、Jfinal、Solon 等集成样例)
- 支持动态修改权限配置(动态修改配置每个 API 谁有权访问)
- 支持 Websocket,主流 HTTP 容器 Servlet 和 JAX-RS
- 支持多种认证策略,JWT、Basic Auth、Digest Auth ... 可扩展自定义认证方式
- 基于改进的字典匹配树拥有的高性能
- 良好的扩展接口,样例和文档助急速理解扩展使用
对比
| Sureness | Shiro | Spring Security |
多框架支持 | 支持 | 需改动支持 | 不支持 |
REST API | 支持 | 需改动支持 | 支持 |
Websocket | 支持 | 不支持 | 不支持 |
过滤链匹配 | 优化的字典匹配树 | ant匹配 | ant匹配 |
注解支持 | 支持 | 支持 | 支持 |
Servlet | 支持 | 支持 | 支持 |
JAX-RS | 支持 | 不支持 | 不支持 |
权限动态修改 | 支持 | 需改动支持 | 需改动支持 |
性能速度 | 较快 | 较慢 | 较慢 |
学习曲线 | 简单 | 简单 | 陡峭 |
架构设计
高性能匹配:

处理流程:

集成案例
Springboot项目集成-配置文件方案:
- 基于springboot
- 从默认的配置文件sureness.yml加载账户信息、资源角色、过滤资源等信息
- 使用默认的sureness-config
- 使用默认的JWT、Basic Auth、Digest Auth方式认证鉴权
- 保护入口:SurenessFilterExample
- 推荐使用postman测试,测试样例为sample-bootstrap-postman.json,导入postman即可
仓库地址:https://github.com/dromara/sureness/tree/master/sample-bootstrap
Springboot项目集成-数据库方案:
- 基于springboot、jpa等
- 自定义数据源,使用从数据库加载账户信息、资源角色、过滤资源等信息,这样便于动态调整(见AccountProvider ResourceProvider)
- 除了使用了默认的JWT,Basic Auth方式认证鉴权,新增自定义认证鉴权(自定义subject subjectCreator processor...)
- 推荐使用postman测试,测试样例为sample-tom-postman.json,导入postman即可
仓库地址:https://github.com/dromara/sureness/tree/master/sample-tom
Quarkus项目集成:
- 基于quarkus,jax-rs
- 从默认的配置文件sureness.yml加载账户信息、资源角色、过滤资源等信息
- 使用默认的sureness-config
- 使用默认的JWT、 Basic Auth、Digest Auth方式认证鉴权
- 例子中包含REST API
- 保护入口:SurenessFilterExample
- 推荐使用postman测试
仓库地址:https://github.com/dromara/sureness/tree/master/samples/quarkus-sureness
Spring-Webflux项目集成:
- 基于spring-webflux
- 自定义 subject creator (BasicSubjectReactiveCreator、JwtSubjectReactiveCreator、NoneSubjectReactiveCreator) 适配 ServerHttpRequest 请求体
- 从默认的配置文件sureness.yml加载账户信息、资源角色、过滤资源等信息
- 使用默认的JWT,Basic Auth方式认证鉴权
- 例子中包含REST API
- 保护入口:SurenessFilterExample
- 推荐使用postman测试
仓库地址:https://github.com/dromara/sureness/tree/master/samples/spring-webflux-sureness
Ktor项目集成:
- 基于ktor, servlet
- 从默认的配置文件sureness.yml加载账户信息、资源角色、过滤资源等信息
- 使用默认的sureness-config
- 使用默认的JWT、 Basic Auth、Digest Auth方式认证鉴权
- 例子中包含REST API
- 保护入口:Application.kt
- 推荐使用postman测试
仓库地址:https://github.com/dromara/sureness/tree/master/samples/ktor-sureness
—END—
开源协议:Apache2.0
开源地址:https://github.com/dromara/sureness