ApiBoot - ApiBoot Security Oauth 依赖使用文档
ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大的提高开发效率。
引入 ApiBoot Security Oauth
在pom.xml
配置文件内添加如下:
<!--ApiBoot Security Oauth-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-starter-security-oauth-jwt</artifactId>
</dependency>
ApiBoot
所提供的依赖都不需要添加版本号,但是需要添加版本依赖,具体查看ApiBoot版本依赖
配置参数列表
ApiBoot
在整合SpringSecurity
、Oauth2
时把配置参数进行了分离,配置列表如下所示:
整合SpringSecurity配置列表
配置名称 |
介绍 |
默认值 |
生效方式 |
---|---|---|---|
api.boot.security.away |
SpringSecurity读取用户的方式,默认为内存方式 |
memory |
all |
api.boot.security.auth-prefix |
拦截的接口路径前缀,如:/api/users就会被默认拦截 |
/api/** |
memory/jdbc |
api.boot.security.users |
配置用户列表,具体使用查看内存方式介绍 |
无 |
memory |
api.boot.security.ignoring-urls |
Spring Security所排除的路径,默认排除Swagger、Actuator相关路径前缀 |
/v2/api-docs<br />/swagger-ui.html<br />/swagger-resources/configuration/security<br />/META-INF/resources/webjars/<br />/swagger-resources<br />/swagger-resources/configuration/ui<br />/actuator/ |
memory/jdbc |
api.boot.security.enable-default-store-delegate |
仅在Jdbc方式生效 |
true |
jdbc |
整合Oauth2配置列表
配置名称 |
介绍 |
默认值 |
绑定away |
---|---|---|---|
api.boot.oauth.away |
Oauth存储Token、读取Client信息方式 |
memory |
all |
api.boot.oauth.cleint-id |
Oauth2 Client ID |
ApiBoot |
memory |
api.boot.oauth.client-secret |
Oauth2 Client Secret |
ApiBootSecret |
memory |
api.boot.oauth.grant-types |
客户端授权方式 |
Srtring[]{"password"} |
memory |
api.boot.oauth.scopes |
客户端作用域 |
String[]{"api"} |
memory |
api.boot.oauth.jwt.enable |
是否启用JWT格式化AccessToken |
false |
memory/jdbc |
api.boot.oauth.jwt.sign-key |
使用JWT格式化AccessToken时的签名 |
ApiBoot |
memory/jdbc |
ApiBoot
在整合SpringSecurity
、Oauth2
时配置进行了分离,也就意味着我们可以让SpringSecurity
读取内存用户、Oauth2
将生成的AccessToken
存放到数据库
,当然反过来也是可以的,相互不影响!!!
内存方式(默认方式)
Spring Security
ApiBoot
在整合Spring Security
的内存方式时,仅仅需要配置api.boot.security.users
用户列表参数即可,就是这么的简单,
配置用户示例如下所示:
api:
boot:
security:
# Spring Security 内存方式用户列表示例
users:
- username: hengboy
password: 123456
- username: apiboot
password: abc321
api.boot.security.users
是一个List<SecurityUser>
类型的集合,所以这里可以配置多个用户。
Oauth2
如果全部使用默认值的情况话不需要做任何配置!!!
Jdbc方式
前提:项目需要添加数据源依赖。
Spring Security
默认用户表
ApiBoot
在整合Spring Security
的Jdbc方式时,在使用ApiBoot
提供的默认结构用户表时只需要修改api.boot.security.away: jdbc
即可,ApiBoot
提供的用户表结构如下所示:
CREATE TABLE `api_boot_user_info` (
`UI_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号,主键自增',
`UI_USER_NAME` varchar(30) DEFAULT NULL COMMENT '用户名',
`UI_NICK_NAME` varchar(50) DEFAULT NULL COMMENT '用户昵称',
`UI_PASSWORD` varchar(255) DEFAULT NULL COMMENT '用户密码',
`UI_EMAIL` varchar(30) DEFAULT NULL COMMENT '用户邮箱地址',
`UI_AGE` int(11) DEFAULT NULL COMMENT '用户年龄',
`UI_ADDRESS` varchar(200) DEFAULT NULL COMMENT '用户地址',
`UI_IS_LOCKED` char(1) DEFAULT 'N' COMMENT '是否锁定',
`UI_IS_ENABLED` char(1) DEFAULT 'Y' COMMENT '是否启用',
`UI_STATUS` char(1) DEFAULT 'O' COMMENT 'O:正常,D:已删除',
`UI_CREATE_TIME` timestamp NULL DEFAULT current_timestamp() COMMENT '用户创建时间',
PRIMARY KEY (`UI_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='ApiBoot默认的用户信息表';
自定义用户表
如果你的系统已经存在了自定义用户表结构,ApiBoot
是支持的,而且很简单就可以完成整合,我们需要先修改api.boot.security.enable-default-store-delegate
参数为false
,如下所示:
api:
boot:
security:
# Spring Security jdbc方式用户列表示例
enable-default-store-delegate: false
away: jdbc
添加ApiBootStoreDelegate
接口实现类,如下所示:
@Component
public class DisableDefaultUserTableStoreDelegate implements ApiBootStoreDelegate {
@Autowired
private PasswordEncoder passwordEncoder;
/**
* 用户列表示例
* 从该集合内读取用户信息
* 可以使用集合内的用户获取access_token
*/
static List<String> users = new ArrayList() {
{
add("api-boot");
add("hengboy");
add("yuqiyu");
}
};
/**
* 根据用户名查询用户信息
*
* @param username 用户名
* @return
* @throws UsernameNotFoundException
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
if (!users.contains(username)) {
throw new UsernameNotFoundException("用户:" + username + "不存在");
}
return new DisableDefaultUserDetails(username);
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class DisableDefaultUserDetails implements UserDetails {
private String username;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return new ArrayList() {
{
add((GrantedAuthority) () -> "ROLE_USER");
}
};
}
/**
* 示例密码使用123456
*
* @return
*/
@Override
public String getPassword() {
return passwordEncoder.encode("123456");
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
}
根据上面代码示例,我们可以通过users
用户列表进行访问获取access_token
。
Oauth2
创建Oauth所需表结构
Oauth2
如果使用Jdbc
方式进行存储access_token
、client_details
时,需要在数据库内初始化Oauth2
所需相关表结构,oauth-mysql.sql
添加客户端数据
初始化Oauth2
表结构后,需要向oauth_client_details
表内添加一个客户端信息,下面是对应ApiBoot Security Oauth
配置信息的数据初始化,如下所示:
INSERT INTO `oauth_client_details` VALUES ('ApiBoot','api','$2a$10$M5t8t1fHatAj949RCHHB/.j1mrNAbxIz.mOYJQbMCcSPwnBMJLmMK','api','password',NULL,NULL,7200,7200,NULL,NULL);
AppSecret
加密方式统一使用BCryptPasswordEncoder
,数据初始化时需要注意。
在上面memory/jdbc
两种方式已经配置完成,接下来我们就可以获取access_token
。
获取AccessToken
通过CURL获取
➜ ~ curl ApiBoot:ApiBootSecret@localhost:8080/oauth/token -d "grant_type=password&username=api-boot&password=123456"
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NTMxMDk1MjMsInVzZXJfbmFtZSI6ImFwaS1ib290IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjBmZTUyY2RlLTBhZjctNDI1YS04Njc2LTFkYTUyZTA0YzUxYiIsImNsaWVudF9pZCI6IkFwaUJvb3QiLCJzY29wZSI6WyJhcGkiXX0.ImqGZssbDEOmpf2lQZjLQsch4ukE0C4SCYJsutfwfx0","token_type":"bearer","expires_in":42821,"scope":"api","jti":"0fe52cde-0af7-425a-8676-1da52e04c51b"}
启用JWT
ApiBoot Security Oauth
在使用JWT
格式化access_token
时非常简单的,配置如下所示:
api:
boot:
oauth:
jwt:
# 开启Jwt转换AccessToken
enable: true
# 转换Jwt时所需加密key,默认为ApiBoot
sign-key: 恒宇少年 - 于起宇
默认不启用JWT
,sign-key
签名建议进行更换。
- NYOJ-------笨蛋难题四
- Win平台Web访问白名单设置脚本(IP安全性原则)
- NYOJ-------表达式求值
- HDUOJ----1181 变形课
- 正确的Win主机网站伪静态设置方法
- HDUOJ----(1084)What Is Your Grade?
- HDUOJ------(1272)小希的迷宫
- HDUOJ ---1269迷宫城堡
- HDUOJ---1213How Many Tables
- hduoj----(1033)Edge
- HDUOJ----(1031)Design T-Shirt
- HDUOJ----(1030)Delta-wave
- 身份切换脚本,免登入切换权限的利器
- HDUOJ---What Are You Talking About
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java】15 File 类
- seaborn更高效的统计图表制作工具
- 牛客2019跨年AK场题解(一)
- qiankun proxySand 沙箱
- MATLAB 与 C 语言的混合编程实战之辛普森积分法、自适应辛普森积分
- Java那些事之JDK环境配置及集成开发环境Eclipse安装
- 敲代码、作诗、写论文无所不能?史上最大AI模型GPT-3霸榜Github
- 数据结构实验——校园导游 实现最小生成树+最短路
- Salesforce LWC学习(二十六) 简单知识总结篇三
- 【Java】13 异常
- 【Java】14 多线程
- 【Java】16 字节流
- 【Java】17 字符流
- 极坐标系在数据可视化中的巧妙运用
- 【Java】18 增强流