当前位置: 首页 > article >正文

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.kler.cn/a/538576.html

相关文章:

  • Spring Boot整合MQTT
  • verilog练习:i2c slave 模块设计
  • 爬虫技巧汇总
  • 【Ubuntu】安装和使用Ollama的报错处理集合
  • 嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
  • Sentinel——Spring Boot 应用接入 Sentinel 后内存开销增长计算方式
  • 前端工程师的AI协作:增强与赋能
  • leetcode_深度搜索和广度搜索 94. 二叉树的中序遍历
  • Ubuntu 作为 FTP 服务器,Windows 作为 FTP 客户端
  • 元宇宙中的隐私与数据保护:Facebook 的挑战与机遇
  • 从零开始人工智能Matlab案例-粒子群优化
  • 武汉火影数字|VR虚拟现实:内容制作与互动科技的奇妙碰撞
  • 人工智能A*算法-爬坡路段增加移动代价,在狭窄街道考虑车辆的转弯半径
  • CF 69A.Young Physicist(Java实现)
  • Java高频面试之SE-19
  • 花旗银行java面试_花旗金融—面经(已offer)
  • docker安装 mongodb
  • 医疗任务VLMs安全漏洞剖析与编程防御策略
  • camera系统之cameraprovider
  • Easing Wizard - 免费的 CSS 缓动曲线在线编辑器,前端开发做动画效果的必备工具
  • CSS 相关知识
  • 【STM32】AHT20温湿度模块
  • Ubuntu 多版本 gcc 配置常用命令备忘
  • 【Rust自学】20.4. 结语:Rust学习一阶段完成+附录
  • 调用 useState 之后发生了啥(⊙_⊙)?
  • windows蓝牙驱动开发-蓝牙无线电重置和恢复