Spring(26) spring-security-oauth2 官方表结构解析
目录
- 一、什么是 spring-security-oauth2?
- 二、spring-security-oauth2 的表结构
- 2.1 oauth_client_details 客户端详细信息表
- 2.2 oauth_access_token 认证授权Token记录表
- 2.3 oauth_refresh_token 刷新授权Token记录表
- 2.4 oauth_code 授权Code记录表
一、什么是 spring-security-oauth2?
Spring Security OAuth2 是 Spring Security 的一个扩展模块,用于支持 OAuth 2.0 协议。OAuth 2.0 是一个授权框架,允许第三方应用在用户授权下访问其资源,而无需共享用户凭证。
- Spring Security OAuth2 提供了实现 OAuth 2.0 授权服务器、资源服务器和客户端的功能。
主要功能:
- 授权服务器:
- 负责颁发访问令牌(Access Token)。
- 支持多种授权模式,如授权码模式、密码模式、客户端凭证模式和简化模式。
- 资源服务器:
- 保护受 OAuth 2.0 保护的资源。
- 验证访问令牌并授权访问资源。
- 客户端:
- 代表用户或应用访问受保护的资源。
- 支持获取和使用访问令牌。
二、spring-security-oauth2 的表结构
spring-security-oauth2 的官方表结构文件:
- https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql
-- used in tests that use HSQL
create table oauth_client_details (client_id VARCHAR(256) PRIMARY KEY,resource_ids VARCHAR(256),client_secret VARCHAR(256),scope VARCHAR(256),authorized_grant_types VARCHAR(256),web_server_redirect_uri VARCHAR(256),authorities VARCHAR(256),access_token_validity INTEGER,refresh_token_validity INTEGER,additional_information VARCHAR(4096),autoapprove VARCHAR(256)
);create table oauth_client_token (token_id VARCHAR(256),token LONGVARBINARY,authentication_id VARCHAR(256) PRIMARY KEY,user_name VARCHAR(256),client_id VARCHAR(256)
);create table oauth_access_token (token_id VARCHAR(256),token LONGVARBINARY,authentication_id VARCHAR(256) PRIMARY KEY,user_name VARCHAR(256),client_id VARCHAR(256),authentication LONGVARBINARY,refresh_token VARCHAR(256)
);create table oauth_refresh_token (token_id VARCHAR(256),token LONGVARBINARY,authentication LONGVARBINARY
);create table oauth_code (code VARCHAR(256), authentication LONGVARBINARY
);
2.1 oauth_client_details 客户端详细信息表
对 oauth_client_details 表的操作,主要集中在 JdbcClientDetailsService.java 类中。
| 字段 | 注释 |
|---|---|
| client_id | 主键(客户端ID) |
| resources_ids | 客户端所能访问的资源ID集合(多个资源用,分隔) |
| client_secret | 客户端访问密钥 |
| scope | 客户端申请的权限范围(read/write/trust,多个权限用,分隔) |
| authorized_grant_types | 5种oauth授权方式(authorization_code;password;refresh_token;client_credentials) |
| web_server_redirect_uri | 回调地址,当grant_type为authorization_code或implicit时, 在Oauth的流程中会使用并检查与数据库内的redirect_uri是否一致。 |
| authorities | 客户端所拥有的Spring Security权限值(多个权限用,分隔) |
| access_token_validity | 设定客户端的access_token的有效时间值(单位:秒),若不设定值则使用默认的有效时间值(60 * 60 * 12, 12小时) |
| refresh_token_validity | 设定客户端的refresh_token的有效时间值(单位:秒),若不设定值则使用默认的有效时间值(60 * 60 * 24 * 30, 30天) |
| additional_infomation | 这是一个预留的字段,在Oauth的流程中没有实际的使用,可选,但若设置值,必须是JSON格式的数据 |
| autoapprove | 设置用户是否自动批准授予权限操作, 默认值为 ‘false’, 可选值包括 ‘true’,‘false’, ‘read’,‘write’. |
2.2 oauth_access_token 认证授权Token记录表
对 oauth_access_token 表的操作主要集中在 JdbcTokenStore.java 类中。
| 字段 | 注释 |
|---|---|
| client_id | 认证授权客户端ID |
| token_id | Token标识:通过MD5加密access_token的值 |
| token | OAuth2AccessToken.java对象序列化内容 |
| user_name | 用户名,若客户端没有用户名则该值等于client_id |
| authentication_id | 根据当前的username、client_id与scope通过MD5加密生成该字段的值 |
| authentication | OAuth2Authentication.java对象序列化内容 |
| refresh_token | RefreshToken标识:通过MD5加密refresh_token的值 |
| create_time | 记录创建时间 |
2.3 oauth_refresh_token 刷新授权Token记录表
对 oauth_refresh_token 的操作主要集中在 JdbcTokenStore.java 类中。
| 字段 | 注释 |
|---|---|
| token_id | RefreshToken标识:通过MD5加密refresh_token的值 |
| token | OAuth2RefreshToken.java对象序列化内容 |
| authentication | OAuth2Authentication.java对象序列化内容 |
| create_time | 记录创建时间 |
2.4 oauth_code 授权Code记录表
对 oauth_code 的操作主要集中在 JdbcAuthorizationCodeSerivces.java 类中。
| 字段 | 注释 |
|---|---|
| authentication | AuthorizationRequestHolder.java对象序列化内容 |
| code | 存储服务端系统生成的code的值(未加密) |
| create_time | 记录创建时间 |
整理完毕,完结撒花~🌻
参考地址:
1.Spring Security Oauth2 官方表结构解析,字段详解,https://blog.csdn.net/yangxiao_hui/article/details/109100140
2.Oauth2详解-介绍(一),https://www.jianshu.com/p/84a4b4a1e833
相关文章:
Spring(26) spring-security-oauth2 官方表结构解析
目录 一、什么是 spring-security-oauth2?二、spring-security-oauth2 的表结构2.1 oauth_client_details 客户端详细信息表2.2 oauth_access_token 认证授权Token记录表2.3 oauth_refresh_token 刷新授权Token记录表2.4 oauth_code 授权Code记录表 一、什么是 spri…...
MySQL 数据库编程-C++
目录 1 数据库基本知识 1.1 MYSQL常见命令 1.2 SQL注入 1.3 ORM框架 1 数据库基本知识 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成:…...
【大数据技术】搭建完全分布式高可用大数据集群(Flume)
搭建完全分布式高可用大数据集群(Flume) apache-flume-1.11.0-bin.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Flume 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目…...
疯狂前端面试题(二)
一、Webpack的理解 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。Webpack 能够将各种资源(JavaScript、CSS、图片、字体等)视为模块,并通过依赖关系图将这些模块打包成一个或多个最终的输出文件(通常是一个或几个…...
kafka专栏解读
kafka专栏文章的编写将根据kafka架构进行编写,即先编辑kafka生产者相关的内容,再编写kafka服务端的内容(这部分是核心,内容较多,包含kafka分区管理、日志存储、延时操作、控制器、可靠性等),最后…...
深入探究 C++17 std::is_invocable
文章目录 一、引言二、std::is_invocable 概述代码示例输出结果 三、std::is_invocable 的工作原理简化实现示例 四、std::is_invocable 的相关变体1. std::is_invocable_r2. std::is_nothrow_invocable 和 std::is_nothrow_invocable_r 五、使用场景1. 模板元编程2. 泛型算法 …...
OpenCV:图像修复
目录 简述 1. 原理说明 1.1 Navier-Stokes方法(INPAINT_NS) 1.2 快速行进方法(INPAINT_TELEA) 2. 实现步骤 2.1 输入图像和掩膜(Mask) 2.2 调用cv2.inpaint()函数 2.3 完整代码示例 2.4 运行结果 …...
【项目日记(四)】thread cache 层
前言 前面我们对整个项目的框架进行了介绍,本期开始我们将进行第一层线程缓存层(thread cache)的详细介绍与实现。 目录 前言 一、thread cache 的整体设计 二、内存对齐规则和哈希映射关系 2.1 如何对齐? 2.2 这样设计对齐规则的好处?…...
人工智能图像分割之Mask2former源码解读
环境搭建: (1)首先本代码是下载的mmdetection-2022.9的,所以它的版本要配置好,本源码配置例如mmcv1.7,python3.7,pytorch1.13,cuda11.7。pytorch与python,cuda版本匹配可参考:https://www.jb51.net/python/3308342lx.htm。 (2)还有一个是先要安装一个vs2022版本或…...
uniapp 编译生成鸿蒙正式app步骤
1,在最新版本DevEco-Studio工具新建一个空项目并生成p12和csr文件(构建-生成私钥和证书请求文件) 2,华为开发者平台 根据上面生成的csr文件新增cer和p7b文件,分发布和测试 3,在最新版本DevEco-Studio工具 文…...
2024最新版Java面试题及答案,【来自于各大厂】
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~ 篇幅限制就只能给大家展示小册部分内容了,需要完整版的及Java面试宝典小伙伴点赞转发,关注我后在【翻到最下方,文尾点击名片】即可免费获取…...
Excel 融合 deepseek
效果展示 代码实现 Function QhBaiDuYunAIReq(question, _Optional Authorization "Bearer ", _Optional Qhurl "https://qianfan.baidubce.com/v2/chat/completions")Dim XMLHTTP As ObjectDim url As Stringurl Qhurl 这里替换为你实际的URLDim postD…...
【填坑】新能源汽车三电设计之常用半导体器件系统性介绍
# 在新能源汽车的三电(电池、电机、电控)系统中,半导体器件扮演着至关重要的角色。它们如同系统的“大脑”和“神经末梢”,精确地控制着电能的流向与转换,确保新能源汽车高效、稳定且安全地运行。今天,就让…...
SpringCloud面试题----Nacos和Eureka的区别
功能特性 服务发现 Nacos:支持基于 DNS 和 RPC 的服务发现,提供了更为灵活的服务发现机制,能满足不同场景下的服务发现需求。Eureka:主要基于 HTTP 的 RESTful 接口进行服务发现,客户端通过向 Eureka Server 发送 HT…...
21.2.6 字体和边框
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体,设置Range.Borders就可以修改边框样式。 【例 21.6】【项目ÿ…...
正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
在正则表达式中,零宽断言是一种非常强大的工具,能够在不消费字符的情况下对匹配位置进行约束。除了环视(lookahead 和 lookbehind)以外,还有一些常用的零宽断言,它们用于处理边界、字符串的开头和结尾等特殊…...
OpenFeign远程调用返回的是List<T>类型的数据
在使用 OpenFeign 进行远程调用时,如果接口返回的是 List 类型的数据,可以通过以下方式处理: 直接定义返回类型为List Feign 默认支持 JSON 序列化/反序列化,如果服务端返回的是 List的JSON格式数据,可以直接在 Feig…...
三维模拟-机械臂自翻车
机械仿真 前言效果图后续 前言 最近在研究Unity机械仿真,用Unity实现其运动学仿真展示的功能,发现一个好用的插件“MGS-Machinery-master”,完美的解决了Unity关节定义缺少液压缸伸缩关节功能,内置了多个场景,讲真的&…...
网络安全治理架构图 网络安全管理架构
网站安全攻防战 XSS攻击 防御手段: - 消毒。 因为恶意脚本中有一些特殊字符,可以通过转义的方式来进行防范 - HttpOnly 对cookie添加httpOnly属性则脚本不能修改cookie。就能防止恶意脚本篡改cookie 注入攻击 SQL注入攻击需要攻击者对数据库结构有所…...
调用deepseek的API接口使用,对话,json化,产品化
背景 最近没咋用chatgpt了,deepseek-r1推理模型写代码质量是很高。deepseek其输出内容的质量和效果在国产的模型里面来说确实算是最强的,并且成本低,它的API接口生态也做的非常好,和OpenAI完美兼容。所以我们这一期来学一下怎么调…...
omegaconf库使用实践
最近在重构RapidOCR仓库代码,使其更加优雅的同时,具有扩展性。无意从他人源码中发现omegaconf库。 omegaconf OmegaConf是一个用于处理配置文件和命令行参数的Python库。它支持YAML、JSON、INI等多种配置文件格式,提供了配置合并、类型安全…...
STM32 USART1 串口调试打印,映射printf函数
该代码可以在freertos中正常运行,你可以进行更多细节优化 PA9(TX) PA10(RX) #include "usart.h"// 解决串口死机问题 #pragma import(__use_no_semihosting) struct __FILE { int handle; }; // 标准库需要的支持函数 FILE __…...
DeepSeek大模型本地部署实战
1. 下载并安装Ollama 打开浏览器:使用你常用的浏览器(如Chrome、Firefox等)访问Ollama的官方网站。无需特殊网络环境,直接搜索“Ollama”即可找到。 登录与下载:进入Ollama官网后,点击右上角的“Download…...
【学习总结|DAY037】Linux 项目部署
引言 在当今的软件开发领域,Linux 以其安全、稳定、免费且开源的特性,成为项目部署的首选操作系统。无论是 Java 项目,还是各类开发、测试、生产环境中的软件安装,Linux 都占据着重要地位。本文将结合我今天所学内容,…...
Spring Boot Actuator使用
说明:本文介绍Spring Boot Actuator的使用,关于Spring Boot Actuator介绍,下面这篇博客写得很好,珠玉在前,我就不多介绍了。 Spring Boot Actuator 简单使用 项目里引入下面这个依赖 <!--Spring Boot Actuator依…...
[css] 黑白主题切换
link动态引入 类名切换 css滤镜 var 类名切换 v-bind css预处理器mixin类名切换 【前端知识分享】CSS主题切换方案...
阿里云专有云网络架构学习
阿里云专有云网络架构 叶脊(spine-leaf)网络和传统三层网络拓扑对比 阿里云网络架构V3拓扑角色介绍推荐设备设备组网举例带外管理网络带外网和带内网对比设备介绍 安全网络设备介绍 参考 后续更新流量分析叶脊(spine-leaf)网络和传…...
【AIGC】冷启动数据与多阶段训练在 DeepSeek 中的作用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯冷启动数据的作用冷启动数据设计 💯多阶段训练的作用阶段 1:冷启动微调阶段 2:推理导向强化学习(RL࿰…...
在SIP路由中,常见的对接方式
好的,我已将应用场景和案例分为两列。修改后的表格如下: 对接方式描述应用场景案例注册 (REGISTER)用于用户注册,将用户位置(如IP地址)与其用户名进行绑定。用户通过发送REGISTER请求将自己注册到SIP服务器。注册过程…...
GenAI + 电商:从单张图片生成可动态模拟的3D服装
在当今数字化时代,电子商务和虚拟现实技术的结合正在改变人们的购物体验。特别是在服装行业,消费者越来越期待能够通过虚拟试衣来预览衣服的效果,而无需实际穿戴。Dress-1-to-3 技术框架正是为此而生,它利用生成式AI模型(GenAI)和物理模拟技术,将一张普通的穿衣照片转化…...
