ApiBoot实现零代码整合Spring Security & OAuth2
接口服务的安全性一直是程序员比较注重的一个问题,成熟的安全框架也比较多,其中一个组合就是Spring Security
与OAuth2
的整合,在ApiBoot
内通过代码的封装、自动化配置实现了自动化整合这两大安全框架。
ApiBoot Security OAuth简介
ApiBoot Security OAuth
是ApiBoot
开源项目内的一个组件,内部通过SpringBoot AutoConfiguration
整合了Spring Security
、OAuth2
,而且支持多种存储方式,如:内存(memory)
、数据库(jdbc)
、Redis
等,使用配置文件的方式来代替代码侵入式集成方式,提高开发效率、减少非业务的繁琐代码,而且还有这比较高的可扩展性。
ApiBoot 源码(源码详见:api-boot-plugins、api-boot-autoconfigure目录):https://gitee.com/minbox-projects/api-boot
ApiBoot Security使用文档:https://apiboot.minbox.org/zh-cn/docs/api-boot-security.html
ApiBoot OAuth使用文档:https://apiboot.minbox.org/zh-cn/docs/api-boot-oauth.html
创建项目
通过Idea
开发工具创建一个名为apiboot-security-oauth-zero-code-integration
的SpringBoot
项目。
添加ApiBoot统一版本依赖
在添加依赖之前我们需要将ApiBoot
的统一版本依赖加入到我们项目的pom.xml
文件内,如下所示:
1 | <!--ApiBoot统一版本依赖--> |
添加ApiBoot Security OAuth依赖
添加完成版本依赖后,我们继续在pom.xml
文件内添加ApiBoot Security OAuth
依赖,如下所示:
1 | <dependencies> |
配置ApiBoot Security用户列表
ApiBoot Security
默认支持内存方式(memory)
配置用户列表
,用于整合OAuth2
的密码授权方式(grant_type=password)
,我们需要在application.yml
配置文件内添加相关配置,如下所示:
1 | spring: |
通过api.boot.security.users
参数可以配置多个用户
信息,每个用户可配置username
、password
、roles
,可以通过查看org.minbox.framework.api.boot.autoconfigure.security.ApiBootSecurityProperties
源码类了解详情。
- username:配置
Spring Security
用户的用户名。 - password:配置
Spring Security
用户的密码。 - roles:配置
Spring Security
用户对应授权的角色列表,多个可以使用英文半角,
隔开,或者使用-
方式配置。
运行测试
我们通过XxxApplication
方式启动本章项目。
测试点:获取AccessToken
项目运行成功后我们先来测试下是否可以获取到AccessToken
。
Curl方式获取:
1 | ➜ ~ curl -X POST ApiBoot:ApiBootSecret@localhost:9090/oauth/token -d "grant_type=password&username=hengboy&password=123456" |
PostMan方式获取:
如果对Spring Security
与OAuth2
整合有一定经验的同学应该明白grant_type
是OAuth2
内提供的其中一种授权方式,而参数username
、password
则是整合后对应的Spring Security
的用户名
以及密码
,也就是我们在application.yml
配置文件api.boot.security.users
配置用户列表的其中一个用户信息。
在上面分别通过Curl
、PostMan
两种方式进行测试获取AccessToken
,都是可以直接获取到的。
测试点:获取当前用户信息
ApiBoot Security OAuth
获取当前用户信息的方式与Spring Security
一样,通过注入java.security.Principal
接口来完成,下面我们创建一个名为UserController
的控制器来测试下效果:
1 | package org.minbox.chapter.apiboot.security.oauth.first.application; |
注意:
ApiBoot Security OAuth
默认权限拦截的路径时/api/**
,所以我们在测试控制器上配置了/api/user
作为路径前缀,如果想对ApiBoot Security OAuth
详细了解,请访问ApiBoot官网文档ApiBoot Security使用文档
我们通过Curl
方式访问http://localhost:9090/api/user
接口效果如下:
1 | ➜ ~ curl http://localhost:9090/api/user -H 'Authorization: Bearer d73e86a8-892f-42c1-bc95-04aedfe97828' |
访问/api/user
路径的AccessToken
是通过用户hengboy
用户生成的,所以该接口返回了hengboy
用户名。
敲黑板,划重点
ApiBoot Security OAuth
极其简单的完成了Spring Security
与OAuth2
的整合,使用内存方式时不需要配置一行代码就可以完成自动化的整合。
代码示例
如果您喜欢本篇文章请为源码仓库点个Star
,谢谢!!!
本篇文章示例源码可以通过以下途径获取,目录为apiboot-security-oauth-first-application
:
ApiBoot实现零代码整合Spring Security & OAuth2
https://blog.minbox.org/apiboot-security-oauth-zero-code-integration.html