目录
- 一、什么是 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