Spring Authorization Server 1.1.1 Schema及相关技术问题咨询
1. Spring Authorization Server 1.1.1 版本 Schema
以下是官方定义的核心表结构(以MySQL为例,其他数据库可调整对应数据类型):
-- 已注册客户端表 CREATE TABLE oauth2_registered_client ( id VARCHAR(100) NOT NULL PRIMARY KEY, client_id VARCHAR(100) NOT NULL, client_id_issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, client_secret VARCHAR(200) DEFAULT NULL, client_secret_expires_at TIMESTAMP DEFAULT NULL, client_name VARCHAR(200) NOT NULL, client_authentication_methods VARCHAR(1000) NOT NULL, authorization_grant_types VARCHAR(1000) NOT NULL, redirect_uris VARCHAR(1000) DEFAULT NULL, post_logout_redirect_uris VARCHAR(1000) DEFAULT NULL, scopes VARCHAR(1000) NOT NULL, client_settings VARCHAR(2000) NOT NULL, token_settings VARCHAR(2000) NOT NULL ); -- 授权记录表 CREATE TABLE oauth2_authorization ( id VARCHAR(100) NOT NULL PRIMARY KEY, registered_client_id VARCHAR(100) NOT NULL, principal_name VARCHAR(200) NOT NULL, authorization_grant_type VARCHAR(100) NOT NULL, authorized_scopes VARCHAR(1000) DEFAULT NULL, attributes TEXT DEFAULT NULL, state VARCHAR(500) DEFAULT NULL, authorization_code_value TEXT DEFAULT NULL, authorization_code_issued_at TIMESTAMP DEFAULT NULL, authorization_code_expires_at TIMESTAMP DEFAULT NULL, authorization_code_metadata TEXT DEFAULT NULL, access_token_value TEXT DEFAULT NULL, access_token_issued_at TIMESTAMP DEFAULT NULL, access_token_expires_at TIMESTAMP DEFAULT NULL, access_token_metadata TEXT DEFAULT NULL, access_token_type VARCHAR(100) DEFAULT NULL, access_token_scopes VARCHAR(1000) DEFAULT NULL, oidc_id_token_value TEXT DEFAULT NULL, oidc_id_token_issued_at TIMESTAMP DEFAULT NULL, oidc_id_token_expires_at TIMESTAMP DEFAULT NULL, oidc_id_token_metadata TEXT DEFAULT NULL, refresh_token_value TEXT DEFAULT NULL, refresh_token_issued_at TIMESTAMP DEFAULT NULL, refresh_token_expires_at TIMESTAMP DEFAULT NULL, refresh_token_metadata TEXT DEFAULT NULL, user_code_value TEXT DEFAULT NULL, user_code_issued_at TIMESTAMP DEFAULT NULL, user_code_expires_at TIMESTAMP DEFAULT NULL, user_code_metadata TEXT DEFAULT NULL, device_code_value TEXT DEFAULT NULL, device_code_issued_at TIMESTAMP DEFAULT NULL, device_code_expires_at TIMESTAMP DEFAULT NULL, device_code_metadata TEXT DEFAULT NULL, FOREIGN KEY (registered_client_id) REFERENCES oauth2_registered_client(id) ); -- 授权同意记录表 CREATE TABLE oauth2_authorization_consent ( registered_client_id VARCHAR(100) NOT NULL, principal_name VARCHAR(200) NOT NULL, authorities VARCHAR(1000) NOT NULL, PRIMARY KEY (registered_client_id, principal_name), FOREIGN KEY (registered_client_id) REFERENCES oauth2_registered_client(id) );
2. 是否可以修改Schema中的表名和列名
可以修改,Spring Authorization Server提供了充足的扩展性支持自定义表结构:
- 针对
oauth2_registered_client表:自定义JdbcRegisteredClientRepository,要么实现RegisteredClientRepository接口,要么通过NamedParameterJdbcTemplate指定自定义表名和列名,同时自定义RegisteredClientRowMapper完成字段映射。 - 针对
oauth2_authorization和oauth2_authorization_consent表:同理,自定义JdbcOAuth2AuthorizationService和JdbcOAuth2AuthorizationConsentService,替换默认SQL语句和RowMapper,适配自定义的表名与列名即可。
3. oauth_client_details 与 oauth2_registered_client 的区别
- 所属框架不同:
oauth_client_details是旧版Spring Security OAuth 2.x(已归档)的客户端表;oauth2_registered_client是新一代OAuth2授权服务器实现Spring Authorization Server的客户端表。 - 字段设计差异:
oauth_client_details字段零散,单独存储scope、authorized_grant_types等配置;oauth2_registered_client采用更紧凑的设计,用逗号分隔字符串存储客户端认证方法、授权类型、作用域等,还新增了client_settings和token_settings字段,以JSON格式存储客户端的精细化配置(如token过期时间、是否强制PKCE等)。 - 功能支持范围:
oauth2_registered_client原生支持OAuth2.1规范的新特性(如PKCE、客户端认证方法扩展),而oauth_client_details仅支持旧版OAuth2规范,对新特性支持有限。 - 扩展性:
oauth2_registered_client的JSON配置字段可轻松扩展配置,无需修改表结构;oauth_client_details若要扩展需新增字段,灵活性较差。
4. 关于指定链接的Schema是否正确
该链接的Schema属于旧版Spring Security OAuth项目(已归档),并非Spring Authorization Server 1.1.1的Schema,因此对于Spring Authorization Server来说是不正确的,不能直接使用。
内容的提问来源于stack exchange,提问作者Aakanksha
相关产品推荐
相关产品推荐

