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 授权服务器、资源服务器和客户端的功能。

主要功能:

  1. 授权服务器:
    • 负责颁发访问令牌(Access Token)。
    • 支持多种授权模式,如授权码模式、密码模式、客户端凭证模式和简化模式。
  2. 资源服务器:
    • 保护受 OAuth 2.0 保护的资源。
    • 验证访问令牌并授权访问资源。
  3. 客户端:
    • 代表用户或应用访问受保护的资源。
    • 支持获取和使用访问令牌。

二、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_types5种oauth授权方式(authorization_code;password;refresh_token;client_credentials)
web_server_redirect_uri回调地址,当grant_type为authorization_codeimplicit时, 在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_idToken标识:通过MD5加密access_token的值
tokenOAuth2AccessToken.java对象序列化内容
user_name用户名,若客户端没有用户名则该值等于client_id
authentication_id根据当前的username、client_id与scope通过MD5加密生成该字段的值
authenticationOAuth2Authentication.java对象序列化内容
refresh_tokenRefreshToken标识:通过MD5加密refresh_token的值
create_time记录创建时间

2.3 oauth_refresh_token 刷新授权Token记录表

oauth_refresh_token 的操作主要集中在 JdbcTokenStore.java 类中。

字段注释
token_idRefreshToken标识:通过MD5加密refresh_token的值
tokenOAuth2RefreshToken.java对象序列化内容
authenticationOAuth2Authentication.java对象序列化内容
create_time记录创建时间

2.4 oauth_code 授权Code记录表

oauth_code 的操作主要集中在 JdbcAuthorizationCodeSerivces.java 类中。

字段注释
authenticationAuthorizationRequestHolder.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【R语言】plyr包和dplyr包

一、plyr包 plyr扩展包主要是实现数据处理中的“分割-应用-组合”(split-apply-combine)策略。此策略是指将一个问题分割成更容易操作的部分,再对每一部分进行独立的操作,最后将各部分的操作结果组合起来。 plyr扩展包中的主要函…

【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析

一、引言与背景 在人工智能领域,大型语言模型(LLM)如DeepSeek以其卓越的自然语言理解和生成能力,推动了众多应用场景的发展。然而,大型模型的高昂计算和存储成本,以及潜在的数据隐私风险,限制了…

【AI】在Ubuntu中使用docker对DeepSeek的部署与使用

这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中,有效地利用机器学习工具来解决问题变得越来越重要。今天,我将引入一个名为DeepSeek 的工具,它作为一种强大的搜索引擎&a…

TCP三次握手全方面详解

文章目录 (1) 三次握手各状态CLOSE状态SYN_SENT状态SYN_RECV状态ESTABLISHED状态 (2) 为什么握手时的seqnum是随机值,以及acknum的功能(3) 三次握手中的半连接队列(SYN队列)和全连接队列(ACCEPT队列)半连接队列全连接队…

数据结构与算法-递归

单路递归 二分查找 /*** 主函数:执行二分查找。* * param a 要搜索的数组(必须是已排序的)* param target 目标值* return 返回目标值在数组中的索引;如果未找到,则返回 -1*/ public static int binarySearch(int[] …

Termux安装ssh实现电脑ssh

Termux下载 点击下载 在 Termux 中安装并使用 SSH,按照以下步骤操作: 1. 更新软件包列表 pkg update && pkg upgrade2. 安装 OpenSSH pkg install openssh3. 设置 SSH 密码(必须,否则无法使用 SSH 服务器&#xff09…

深入理解 C++17 std::is_swappable

文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中,交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…

51单片机之冯·诺依曼结构

一、概述 8051系列单片机将作为控制应用最基本的内容集成在一个硅片上,其内部结构如图4-1所示。作为单一芯片的计算机,它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU,由运算器和控制器两个部分构成;…

w~Transformer~合集5

我自己的原文哦~ https://blog.51cto.com/whaosoft/12406495 #transformer~x1 太可怕了都到6了 太强~~ DeepMind 表示,他们提出的算法蒸馏(AD)是首个通过对具有模仿损失的离线数据进行顺序建模以展示上下文强化学习的方法。同时基于观察…

c#对接deepseek 聊天AI接口

注意:不是免费 对接文档:对话补全 | DeepSeek API Docs 注册地址:DeepSeek 申请key 在线请求示例 apifox deepseek - deepseek

23.PPT:校摄影社团-摄影比赛作品【5】

目录 NO12345​ NO6 NO7/8/9/10​ 单元格背景填充表格背景填充文本框背景填充幻灯片背景格式设置添加考生文件夹下的版式 NO12345 插入幻灯片和放入图片☞快速:插入→相册→新建相册→文件→图片版式→相框形状→调整边框宽度左下角背景图片:视图→…

创新领先!珈和科技获评省级企业技术中心

为充分发挥中小企业创新主体作用,提高自主创新、集成创新和引进消化吸收再创新能力,增强创新驱动发展的动力,做好专精特新“小巨人”企业的培育工作。 近日,湖北省经信厅对申报2024年湖北省中小企业技术中心的企业进行审核认定并…

初次体验Tauri和Sycamore (2)

原创作者:庄晓立(LIIGO) 原创时间:2025年2月8日(首次发布时间) 原创链接:https://blog.csdn.net/liigo/article/details/145520637 版权所有,转载请注明出处。 关键词:Sy…

vs封装dll 给C#使用

一,vs创建控制台应用 创建控制台应用得好处时,我们可以自己测试接口,如果接口没有问题,改成dll重新编译一遍就可以。 二, 创建一个c 类,将所需提供得功能 封装到类中。 这样可以将 所有功能,进…

紧跟潮流,将 DeepSeek 集成到 VSCode

Visual Studio Code(简称 VSCode)是一款由微软开发的免费开源代码编辑器,自 2015 年发布以来,凭借其轻便、强大、且拥有丰富扩展生态的特点,迅速成为了全球开发者的首选工具。VSCode 支持多平台操作系统,包…

html 列动态布局

样式说明: /* 列动态布局,列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

从O(k*n)到O(1):如何用哈希表终结多层if判断的性能困局

【前言】   本文将以哈希表重构实战为核心,完整展示如何将传统条件匹配逻辑(上千层if-else判断)转化为O(1)的哈希表高效实现。通过指纹验证场景的代码级解剖,您将深入理解:   1.哈希函数设计如何规避冲突陷阱   2.链式寻址法的工程实现…

第 26 场 蓝桥入门赛

3.电子舞龙【算法赛】 - 蓝桥云课 问题描述 话说这年头,连舞龙都得电子化!这不,蓝桥村的老程序员王大爷突发奇想,用LED灯带和一堆传感器鼓捣出了一条“电子舞龙”,它能根据程序指令在村里的广场上“翩翩起舞”。 广…

0012—数组

存取一组数据,使用数组。 数组是一组相同类型元素的集合。 要存储1-10的数字,怎么存储? C语言中给了数组的定义:一组相同类型元素的集合。 创建一个空间创建一组数: 一、数组的定义 int arr[10] {1,2,3,4,5,6,7,8,…

详细教程 | 如何使用DolphinScheduler调度Flink实时任务

Apache DolphinScheduler 非常适用于实时数据处理场景,尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能,包括任务依赖管理、动态调度、实时监控和日志管理,能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…