Spring(26) spring-security-oauth2 官方表结构解析

devtools/2025/2/10 8:29:34/

目录

    • 一、什么是 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记录表

springsecurityoauth2_2">一、什么是 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. 客户端:
    • 代表用户或应用访问受保护的资源。
    • 支持获取和使用访问令牌。

springsecurityoauth2__22">二、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.ppmy.cn/devtools/157580.html

相关文章

Netty:高性能网络应用框架的深度解析

引言 Netty 是由 JBoss 提供的一个开源的 Java NIO 客户端/服务器框架,它用以快速开发网络应用程序,如协议服务器和客户端。它的设计目标是提供异步事件驱动的网络应用程序框架,支持高效的网络通信和数据处理。Netty 在性能、可扩展性、安全…

AI眼镜-推理成本降低将加速端侧硬件智能化-AI 眼镜、AI玩具、手机AI化

机构研报指出,推理成本降低将加速端侧硬件智能化,AI端侧中 AI 眼镜、AI玩具、手机AI化、AIPC等方向均有望受益。 300735光弘科技 华为产业链消费电子 | 光弘科技9月19日进行投资者关系活动,称公司是华为的核心供应商,为客户提供包…

MoviePy,利用Python自动剪辑tiktok视频

Python剪辑视频是非常强大的,而且能流水线批量操作,可以使用MoviePy库实现。 最近看到一个Github项目,作者利用Python写了一个自动生成tiktok视频的脚本,受到热捧。 现在像抖音、tiktok上有很多流水线生产的视频,不少…

计算机视觉-边缘检测

一、边缘 1.1 边缘的类型 ①实体上的边缘 ②深度上的边缘 ③符号的边缘 ④阴影产生的边缘 不同任务关注的边缘不一样 1.2 提取边缘 突变-求导(求导也是一种卷积) 近似,1(右边的一个值-自己可以用卷积做) 该点f(x,y)…

驱动开发系列35 - Linux Graphics GEM Buffer Object 介绍

一:概述 在 Linux 内核中,DRM(Direct Rendering Manager)模块 是用于管理显示硬件和图形渲染的核心框架。它负责协调用户空间应用程序(例如 X Server、Wayland Compositors、Mesa 等)和 GPU 硬件之间的通信,是 Linux 图形子系统的重要组成部分。 GEM (Graphics Executio…

我们来学人工智能 -- 将Ollama已下载的模型从C盘迁出

题记 未配置OLLAMA_MODELS系统变量导致模型下载到了C盘 迁移步骤 退出ollama 配置OLLAMA_MODELS系统变量 OLLAMA_MODELS:D:\ollama\models 直接将C盘下的models目录剪切到指定目录 检查 cmd命令窗口退出重新打开

从算法到落地:DeepSeek如何突破AI工具的同质化竞争困局

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ Linux网络编程笔记: https://blog.cs…

代码随想录day06

242.有效的字母异位词 刚学哈希表想着使用unordered_set来实现,结果无法通过,原因是对字母异位词理解有问题,字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。对字母出现的次数有要求&am…