Java进阶指南
表达式解析
UEL 统一表达式语言
Ognl 对象图导航语言
Spel Spring表达式语言
Java 进阶
SPI的高级用法
SLF4J的绑定原理
H2 JDBC驱动类注册与数据库引擎初始化原理
Java SPI与Dubbo SPI区别
Java 秒懂对象 PO、VO、BO、DTO、POJO!
Java POJO/DO/DTO/BO/VO概念及应用案例分析
一个线程oom,进程里其他线程还能运行吗?
jps命令详解
Java的BigDecimal也会存在丢失精度的问题
java中的枚举类和常量类区别在哪儿?
Java 打包 FatJar 方法小结
"too many open files"的原理和解决方案
GraalVM 专栏
GraalVM入门以及环境搭建
Maven 专栏
maven 跳过单元测试-maven.test.skip和skipTests的区别
maven 配置代码检查插件,生成检查报告
Maven 执行生命周期
maven 删除本地仓库当前项目的依赖包
Gradle 专栏
自己动手应用Groovy实现Gradle的DSL—Task定义
看懂Gradle脚本(1)- Groovy语言的Map语法糖
看懂Gradle脚本(2)- Groovy语言的闭包语法
看懂Gradle脚本(3)- Groovy AST转换
看懂Gradle脚本(4)- Groovy语法之运算符重载
看懂Gradle脚本(5)- 跟Gradle学领域驱动设计
看懂Gradle脚本(6)- Hello Groovy, Goodbye Getters&Setters
看懂Gradle脚本(7)- ext {}函数是如何实现的
Gradle 常见问题集锦
Spring 专栏
Spring AOP 使用介绍,从前世到今生
Spring IOC 容器源码分析
Spring AOP 源码解析
Spring @PropertySource 注解实现读取 yml 文件
Spring 好用的工具类
Spring @Async失效情况
Spring I/O 2023 干货视频精选!
Spring 动态刷新bean
Spring Cache缓存技术
Spring @Transactional注解失效情况
Spring Event 事件订阅踩坑
循环依赖
Spring 解析@Async引起的循环依赖
Spring 中的循环依赖
从源码层面深度剖析 Spring 循环依赖 | 京东云技术团队
Spring 不同平台构建出现循环依赖错误问题原因分析
SpringBoot 专栏
SpringBoot 构建FarJAR Maven配置
SpringBoot 项目启动慢原因分析
SpringBoot 资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
SpringBoot 读取Jar包中静态资源原理
SpringBoot 配置Undertow处理高并发
SpringBoot Maven Profile配合Spring Profile进行多环境配置和打包
SpringBoot 使用profile结合maven实现多环境配置
SpringBoot @ComponentScan注解过滤排除不加载某个类的3种方法
Mybatis 专栏
Mybatis 一级、二级缓存机制
Mybatis 关闭一级、二级缓存机制
MybatisPlus
MybatisPlus LambdaQueryWrapper类的实现原理
MybatisPlus 在不修改全局策略和字段注解的情况下将字段更新为null
并发与多线程
Java 从单核到多核的多线程并发
并发和并行的区别
Redisson 专栏
一次生产redisson 延时队列不消费问题排查
redisson 阻塞队列不消费问题排查
Spring Batch 专栏
批处理框架spring batch基础知识介绍
Shiro 专栏
一篇适合小白的Shiro教程
SpringMVC 专栏
SpringMVC 后端处理多文件上传如何保持最大的灵活性
@RequestParam的加与不加的作用
SpringCloud 专栏
Gateway 一文彻底解决跨域问题
ruoyi-vue-pro 开发指南
萌新必读
简介
交流群
视频教程
功能列表
快速启动(后端项目)
快速启动(前端项目)
接口文档
技术选型
项目结构
代码热加载
一键改包
删除功能
内网穿透
达梦数据库专属
后端手册
新建模块
代码生成【单表】(新增功能)
代码生成【主子表】
代码生成【树表】
功能权限
数据权限
用户体系
三方登录
OAuth 2.0(SSO 单点登录)
SaaS多租户【字段隔离】
SaaS 多租户【数据库隔离】
WebSocket 实时通讯
异常处理(错误码)
参数校验、时间传参
分页实现
VO 对象转换、数据翻译
文件存储(上传下载)
Excel 导入导出
操作日志、访问日志、异常日志
MyBatis 数据库
MyBatis 联表&分页查询
多数据源(读写分离)、事务
Redis 缓存
本地缓存
异步任务
分布式锁
幂等性(防重复提交)
请求限流(RateLimiter)
单元测试
验证码
工具类
配置管理
数据库文档
中间件手册
定时任务
消息队列(内存)
消息队列(Redis)
消息队列(RocketMQ)
消息队列(RabbitMQ)
消息队列(Kafka)
限流熔断
工作流手册
工作流演示
功能开启
工作流(达梦适配)
审批接入(流程表单)
审批接入(业务表单)
流程设计器(BPMN)
流程设计器(钉钉、飞书)
选择审批人、发起人自选
会签、或签、依次审批
流程发起、取消、重新发起
审批通过、不通过、驳回
审批加签、减签
审批转办、委派、抄送
执行监听器、任务监听器
流程表达式
流程审批通知
大屏手册
报表设计器
大屏设计器
支付手册
功能开启
支付宝支付接入
微信公众号支付接入
微信小程序支付接入
支付宝、微信退款接入
会员手册
功能开启
微信公众号登录
微信小程序登录
会员用户、标签、分组
会员等级、积分、签到
商城手册
商城演示
功能开启
商城装修
【商品】商品分类
【商品】商品属性
【商品】商品 SPU 与 SKU
【商品】商品评价
【交易】购物车
【交易】交易订单
【交易】售后退款
【交易】快递发货
【交易】门店自提
【交易】分销返佣
【营销】优惠劵
【营销】拼团活动
【营销】秒杀活动
【营销】砍价活动
【营销】满减送
【营销】限时折扣
【营销】内容管理
【统计】会员、商品、交易统计
ERP手册
ERP 演示
功能开启
【产品】产品信息、分类、单位
【库存】产品库存、库存明细
【库存】其它入库、其它出库
【库存】库存调拨、库存盘点
【采购】采购订单、入库、退货
【销售】销售订单、出库、退货
【财务】采购付款、销售收款
CRM 手册
CRM 演示
功能开启
【线索】线索管理
【客户】客户管理、公海客户
【商机】商机管理、商机状态
【合同】合同管理、合同提醒
【回款】回款管理、回款计划
【产品】产品管理、产品分类
【通用】数据权限
【通用】跟进记录、待办事项
公众号手册
功能开启
公众号接入
公众号粉丝
公众号标签
公众号消息
自动回复
公众号菜单
公众号素材
公众号图文
公众号统计
系统手册
短信配置
邮件配置
站内信配置
数据脱敏
敏感词
地区 & IP 库
运维手册
开发环境
Linux 部署
Docker 部署
Jenkins 部署
HTTPS 证书
服务监控
前端手册 Vue 3.x
开发规范
菜单路由
Icon 图标
字典数据
系统组件
通用方法
配置读取
CRUD 组件
国际化
IDE 调试
代码格式化
前端手册 Vue 2.x
开发规范
菜单路由
Icon 图标
字典数据
系统组件
通用方法
配置读取
更新日志
【v2.1.0】开发中
【v2.0.1】2024-03-01
【v2.0.0】2024-01-26
【v1.9.0】2023-12-01
【v1.8.3】2023-10-24
yudao-cloud 开发指南
萌新必读
简介
交流群
视频教程
功能列表
快速启动(后端项目)
快速启动(前端项目)
接口文档
技术选型
项目结构
代码热加载
一键改包
删除功能
内网穿透
达梦数据库专属
微服务手册
微服务调试(必读)
注册中心 Nacos
配置中心 Nacos
服务网关 Spring Cloud Gateway
服务调用 Feign
定时任务 XXL Job
消息队列(内存)
消息队列(Redis)
消息队列(RocketMQ)
消息队列(RabbitMQ)
消息队列(Kafka)
消息队列(Cloud)
分布式事务 Seata
服务保障 Sentinel
Spring Security 专栏
Spring Security 入门
Spring Security OAuth2 入门
Spring Security OAuth2 存储器
Spring Security OAuth2 单点登录
Spring Security 常见问题
Guava 专栏
Guava 常用API汇总
本文档使用 MrDoc 发布
-
+
首页
Spring Security OAuth2 存储器
> 本文在提供完整代码示例,可见 [https://github.com/YunaiV/SpringBoot-Labs](https://github.com/YunaiV/SpringBoot-Labs) 的 [lab-68-spring-security-oauth](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-68-spring-security-oauth) 目录。 > > 原创不易,给点个 [Star](https://github.com/YunaiV/SpringBoot-Labs/stargazers) 嘿,一起冲鸭! # 1\. 概述 在[《芋道 Spring Security OAuth2 入门》](http://www.iocoder.cn/Spring-Security/OAuth2-learning/?self)文章中,我们完成了 [Spring Security OAuth](https://github.com/spring-projects/spring-security-oauth) 框架的学习。但是我们在文末中也提到,采用基于**内存**的 [InMemoryTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/InMemoryTokenStore.java),实现**访问**令牌和**刷新**令牌的存储。它会存在两个明显的**缺点**: - **重启**授权服务器时,令牌信息会**丢失**,导致用户需要重新授权。 - **多个**授权服务器时,令牌信息无法**共享**,导致用户一会授权成功,一会授权失败。 因此,本文我们来学习 Spring Security OAuth 提供的其它存储器。[TokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/TokenStore.java) 是 Spring Security OAuth 定义的**令牌存储器接口**,它有如下实现类:  - 基于**数据库**的 [JdbcTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/JdbcTokenStore.java) - 基于 **Redis** 的 [RedisTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java) - 基于 **JWT** 的 [JwtTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/JwtTokenStore.java) 下面,我们逐个小节来演示每个 TokenStore 的配置与使用。 # 2\. 数据库存储器 > 示例代码对应仓库: > > - 授权服务器:[`lab-68-demo11-authorization-server-by-jdbc-store`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/) 本小节,我们使用基于**数据库**存储的 [JdbcTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/JdbcTokenStore.java)。 **复制**出 [`lab-68-demo11-authorization-server-by-jdbc-store`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/) 项目,进行改造接入 JdbcTokenStore 存储器。最终项目如下图所示:  ## 2.1 初始化数据库 ① 执行 [`schema.sql`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/src/main/resources/db/schema.sql) 脚本,创建数据库**表结构**。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">drop</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_client_details;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> oauth_client_details (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>) PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> resource_ids <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_secret <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">scope</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authorized_grant_types <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> web_server_redirect_uri <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authorities <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> access_token_validity <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">INTEGER</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> refresh_token_validity <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">INTEGER</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> additional_information <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">4096</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> autoapprove <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_client_token (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authentication_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>) PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> user_name <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_access_token (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authentication_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>) PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> user_name <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">authentication</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> refresh_token <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_refresh_token (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">authentication</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_code (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> code <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>), <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">authentication</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_approvals (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> userId <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> clientId <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">scope</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">status</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">10</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> expiresAt <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TIMESTAMP</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DEFAULT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CURRENT_TIMESTAMP</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> lastModifiedAt <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TIMESTAMP</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DEFAULT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CURRENT_TIMESTAMP</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 结果如下图所示:  | 表 | 作用 | | --- | --- | | `oauth_access_token` | OAuth 2.0 **访问**令牌 | | `oauth_refresh_token` | OAuth 2.0 **刷新**令牌 | | `oauth_code` | OAuth 2.0 **授权码** | | `oauth_client_details` | OAuth 2.0 **客户端** | | `oauth_client_token` | | | `oauth_approvals` | | > 旁白君:这里的表结构设计,我们可以借鉴参考,实现自己的 OAuth 2.0 的功能。 ② 执行 [`data.sql`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/src/main/resources/db/data.sql) 脚本,插入一个客户端记录。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INSERT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INTO</span> oauth_client_details</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> (client_id, client_secret, <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">scope</span>, authorized_grant_types,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> web_server_redirect_uri, authorities, access_token_validity,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> refresh_token_validity, additional_information, autoapprove)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">VALUES</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> (<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'clientapp'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'112233'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'read_userinfo,read_contacts'</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'password,refresh_token'</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">null</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">null</span>, <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">3600</span>, <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">864000</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">null</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">true</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 结果如下图所示:  ## 2.2 引入依赖 修改 [`pom.xml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/pom.xml) 文件,**额外**引入**数据库连接池**的依赖: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对数据库连接池的自动化配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-jdbc<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 本示例,我们使用 MySQL --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>mysql<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>mysql-connector-java<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>5.1.48<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 2.3 配置文件 创建 [`application.yaml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/src/main/resources/application.yaml) 配置文件,添加**数据库连接池**的配置: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># datasource 数据源配置内容,对应 DataSourceProperties 配置属性类</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> datasource:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> url:</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">jdbc:mysql://127.0.0.1:43063/demo-68-authorization-server?useSSL=false&useUnicode=true&characterEncoding=UTF-8</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> driver-class-name:</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">com.mysql.jdbc.Driver</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> username:</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">root</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 数据库账号</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> password:</span> <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">123456</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 数据库密码</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 2.4 OAuth2AuthorizationServerConfig 修改 [OAuth2AuthorizationServerConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jdbc-store/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java) 配置类,设置使用 [JdbcTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/JdbcTokenStore.java) 和 [ClientDetailsService](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/ClientDetailsService.java)。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableAuthorizationServer</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">OAuth2AuthorizationServerConfig</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">extends</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">AuthorizationServerConfigurerAdapter</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 用户认证 Manager</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> AuthenticationManager authenticationManager;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 数据源 DataSource</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> DataSource dataSource;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> TokenStore <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">jdbcTokenStore</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> JdbcTokenStore(dataSource);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerEndpointsConfigurer endpoints)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> endpoints.authenticationManager(authenticationManager)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .tokenStore(jdbcTokenStore());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerSecurityConfigurer oauthServer)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> oauthServer.checkTokenAccess(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"isAuthenticated()"</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> ClientDetailsService <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">jdbcClientDetailsService</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> JdbcClientDetailsService(dataSource);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(ClientDetailsServiceConfigurer clients)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> clients.withClientDetails(jdbcClientDetailsService());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 具体的修改点,如下图所示:  ## 2.5 简单测试 执行 AuthorizationServerApplication 启动授权服务器。下面,我们使用 **Postman 模拟一个 Client**。 ① `POST` 请求 [http://localhost:8080/oauth/token](http://localhost:8080/oauth/token) 地址,使用**密码**模式进行**授权**。如下图所示:  ② 查询 `oauth_access_token` 和 `oauth_refresh_token` 表,查看**访问**令牌和**刷新**令牌。如下图所示:   # 3\. Redis 存储器 > 示例代码对应仓库: > > - 授权服务器:[`lab-68-demo11-authorization-server-by-redis-store`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-redis-store/) 本小节,我们使用基于 **Redis** 存储的 [RedisTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java)。 **复制**出 [`lab-68-demo11-authorization-server-by-redis-store`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-redis-store/) 项目,进行改造接入 RedisTokenStore 存储器。最终项目如下图所示:  ## 3.1 引入依赖 修改 [`pom.xml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-redis-store/pom.xml) 文件,**额外**引入 **Spring Data Redis** 的依赖: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对 Spring Data Redis 的自动化配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-data-redis<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> > 友情提示:想要学习 Spring Data Redis 的胖友,可以看看[《芋道 Spring Boot Redis 入门》](http://www.iocoder.cn/Spring-Boot/Redis/?self)文章。 ## 3.2 配置文件 创建 [`application.yaml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-redis-store/src/main/resources/application.yml) 配置文件,添加 **Spring Data Redis** 的配置: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 对应 RedisProperties 类</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> redis:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> host:</span> <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">127.0</span><span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">.0</span><span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">.1</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> port:</span> <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">6379</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 3.3 OAuth2AuthorizationServerConfig 修改 [OAuth2AuthorizationServerConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-redis-store/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java) 配置类,设置使用 [RedisTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java)。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableAuthorizationServer</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">OAuth2AuthorizationServerConfig</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">extends</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">AuthorizationServerConfigurerAdapter</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 用户认证 Manager</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> AuthenticationManager authenticationManager;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * Redis 连接的工厂</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> RedisConnectionFactory redisConnectionFactory;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> TokenStore <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">redisTokenStore</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> RedisTokenStore(redisConnectionFactory);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerEndpointsConfigurer endpoints)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> endpoints.authenticationManager(authenticationManager)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .tokenStore(redisTokenStore());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerSecurityConfigurer oauthServer)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> oauthServer.checkTokenAccess(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"isAuthenticated()"</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(ClientDetailsServiceConfigurer clients)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> clients.inMemory()</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .withClient(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"clientapp"</span>).secret(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"112233"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// Client 账号、密码。</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .authorizedGrantTypes(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"password"</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"refresh_token"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 密码模式</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .scopes(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"read_userinfo"</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"read_contacts"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 可授权的 Scope</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// .and().withClient() // 可以继续配置新的 Client</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> ;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 具体的修改点,如下图所示:  ## 3.4 简单测试 执行 AuthorizationServerApplication 启动授权服务器。下面,我们使用 **Postman 模拟一个 Client**。 ① `POST` 请求 [http://localhost:8080/oauth/token](http://localhost:8080/oauth/token) 地址,使用**密码**模式进行**授权**。如下图所示:  ② 查看 Redis 中的 **访问**令牌和**刷新**令牌。如下图所示:  # 4\. JWT 存储器 > 示例代码对应仓库: > > - 授权服务器:[`lab-68-demo11-authorization-server-by-jwt-store`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jwt-store/) 本小节,我们使用基于 **JWT** 存储的 [JwtTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/JwtTokenStore.java)。 > 友情提示:如果胖友对 JWT 不了解的胖友,可以先看看如下两篇文章: > > - [《JSON Web Token - 在Web应用间安全地传递信息》](http://www.iocoder.cn/Fight/understanding-jwt/?self) > - [《八幅漫画理解使用 JSON Web Token 设计单点登录系统》](http://www.iocoder.cn/Fight/user-authentication-with-jwt/?self) **复制**出 [`lab-68-demo11-authorization-server-by-jwt-store`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jwt-store/) 项目,进行改造接入 JwtTokenStore 存储器。最终项目如下图所示:  ## 4.1 OAuth2AuthorizationServerConfig 修改 [OAuth2AuthorizationServerConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo11-authorization-server-by-jwt-store/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java) 配置类,设置使用 [JwtTokenStore](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/JwtTokenStore.java)。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableAuthorizationServer</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">OAuth2AuthorizationServerConfig</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">extends</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">AuthorizationServerConfigurerAdapter</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 用户认证 Manager</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> AuthenticationManager authenticationManager;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> JwtAccessTokenConverter <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">jwtAccessTokenConverter</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> JwtAccessTokenConverter converter = <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> JwtAccessTokenConverter();</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> converter.setSigningKey(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"nainai_zui_shuai"</span>); <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// JWT 秘钥</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> converter;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> JwtTokenStore <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">jwtTokenStore</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> JwtTokenStore(jwtAccessTokenConverter());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerEndpointsConfigurer endpoints)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> endpoints.authenticationManager(authenticationManager)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .tokenStore(jwtTokenStore())</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .accessTokenConverter(jwtAccessTokenConverter());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerSecurityConfigurer oauthServer)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> oauthServer.checkTokenAccess(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"isAuthenticated()"</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// oauthServer.tokenKeyAccess("isAuthenticated()")</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// .checkTokenAccess("isAuthenticated()");</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// oauthServer.tokenKeyAccess("permitAll()")</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// .checkTokenAccess("permitAll()");</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(ClientDetailsServiceConfigurer clients)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> clients.inMemory()</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .withClient(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"clientapp"</span>).secret(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"112233"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// Client 账号、密码。</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .authorizedGrantTypes(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"password"</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"refresh_token"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 密码模式</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .scopes(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"read_userinfo"</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"read_contacts"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 可授权的 Scope</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// .and().withClient() // 可以继续配置新的 Client</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> ;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 具体的修改点,如下图所示:  ## 4.2 简单测试 执行 AuthorizationServerApplication 启动授权服务器。下面,我们使用 **Postman 模拟一个 Client**。 ① `POST` 请求 [http://localhost:8080/oauth/token](http://localhost:8080/oauth/token) 地址,使用**密码**模式进行**授权**。如下图所示:  ② 使用 [https://jwt.io/](https://jwt.io/) 提供的工具,解析 JWT 令牌。如下图所示:  # 666\. 彩蛋 比较简单的一篇文章,下一篇[《芋道 Spring Security OAuth2 单点登录》](http://www.iocoder.cn/Spring-Security/OAuth2-learning-sso/?self)走起!
LazzMan
2024年4月30日 17:41
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码