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