1. Wall是什么?
Wall是由本人开源的一款基于6A(Account、Authentication、Authorization、Audit、Approve、Application) 体系所打造的身份识别与访问管理系统,其目的是为了解决传统接入方式的复杂与混乱; 我们提供了一种简单、统一的接入方式,定义了标准的接入协议,使得开发者可以快速的接入Wall,实现身份识别与访问管理的功能。 项目地址:点我直达
2. 整体架构
从架构图可以看出,Wall主要由以下几个部分组成:
- wall-account:账号管理模块,提供账号的增删改查等功能;通常将人事专员在IM/人事系统中维护的账号信息同步到Wall中;
- wall-identity:身份认证模块,基于wall-account提供的账号信息,进行身份认证,返回认证结果;
- wall-auth:权限认证模块,基于用户提供的身份及需要访问的资源和行为,进行权限认证,返回授权结果;
- wall-application:应用管理模块,外部应用、内部系统访问被wall保护的资源时,需要先在wall-application中注册应用,获取应用ID和应用密钥;
- wall-approve:审批模块,对于一些敏感操作,需要进行审批,审批通过后才能执行;比如应用注册、账号删除、权限变更等;
- wall-audit:审计模块,记录上述发生的所有操作,以便后续审计;
- wall-event:事件模块,wall中的所有操作都会产生事件,事件会被发送到消息队列中,供其他系统订阅。
从数据流向可以看出
- 用户通过Web、App访问时,对外网关会根据wall-identity和wall-auth的认证结果,返回给用户相应的资源;
- 应用通过API访问时,需要先在wall-application中注册应用,获取应用ID和应用密钥,然后在请求头中带上应用ID和应用密钥,内部网关会根据wall-auth的认证结果,返回给应用相应的资源。
- 下游系统通过消息队列订阅事件,对事件进行处理。比如风控系统检测到异常行为,可及时通知对应责任人,将风险扼杀在摇篮中。
3. Wall的优势
- 标准协议:基于业内标准协议如OAuth2.0、OpenID Connect等,能够快速接入Wall;
- 接口扩展:如果对应wall提供的接口不满足需求,可以自定义扩展接口,实现自定义逻辑;
- 便于集成:Wall提供了丰富的SDK,可以快速集成到现有系统中;
- 可视化操作:Wall提供了可视化的操作界面,方便人事专员、开发者等进行操作;
- 更多优势等你发现...
4. 现状
目前Wall只完成wall-auth模块的开发,其他模块仍处于规划阶段,欢迎各位小伙伴一起参与开发,共同打造Wall。 接下来的计划是完成wall-account&wall-identity模块的开发,实现身份认证与访问管理的功能。
5. 如何使用
牛逼吹的再响,也不如一行代码来的实在,下面是Wall的使用示例(参考[wall-demo-auth]模块):
xml
<!--引入wall-bootstrap-spring-boot模块-->
<dependency>
<groupId>com.github.moruke</groupId>
<artifactId>wall-bootstrap-spring-boot</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
该模块集成了wall-auth模块,提供了Action、Object、Role的管理接口,以及通过使用注解的方式进行权限认证。 如果想自己基于wall-auth模块进行封装,建议直接引入:
xml
<dependency>
<groupId>com.github.moruke</groupId>
<artifactId>wall-auth</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
另外,在Classpath中添加配置文件[application.yml]
yaml
...
mybatis:
mapper-locations: classpath:mapperxml/**/*.xml
wall:
plugin:
auth:
component:
type: casbin
casbin:
model-path: casbin/model.conf
...
这里我们关注一下wall.plugin.auth.component.type
,目前只支持casbin
作为鉴权组件,后续会集成更多的鉴权组件。 wall.plugin.auth.component.casbin.model-path
是casbin的策略文件路径,可以参考casbin官方文档。 如果不想去了解casbin,可以直接使用demo中的model.conf
文件。并且路径与配置文件中的路径一致。
接下来将[wall-auth/src/main/resources/v1.0.0/init_ddl.sql]中的SQL脚本导入到数据库中,初始化数据库表。
最后,启动你的Spring Boot应用,访问http://localhost:xxxx/swagger-ui.html,即可看到Wall的API文档。
6. 结语
有关Wall的第一篇博客就到这里,我们这一期主要介绍了Wall的整体架构,优势,现状,如何使用等内容。 下一期我们会重点介绍wall-auth是如何实现权限管控的,以及我们该如何真正的在项目中使用Wall。