You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security 6中JdbcTokenStore的替代方案咨询(OAuth2迁移)

Spring Security 6 替代 JdbcTokenStore 的方案

Spring Security 6 移除了旧版 OAuth2 模块中的 JdbcTokenStore,因为官方已将 OAuth2 授权服务器的核心功能迁移至 Spring Authorization Server 项目。要保留原有基于 JDBC 的令牌存储逻辑、且行为与 JdbcTokenStore 一致,可以按照以下方案实现:

1. 引入 Spring Authorization Server 依赖

首先需要添加官方授权服务器的依赖,以 Maven 为例:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-authorization-server</artifactId>
    <version>1.1.0</version> <!-- 版本需与 Spring Security 6.0.x 匹配 -->
</dependency>

2. 配置 JDBC 令牌存储组件

Spring Authorization Server 提供了 JdbcOAuth2AuthorizationService 和 JdbcOAuth2AuthorizationConsentService,这两个组件基于 JDBC 存储授权信息与令牌,是 JdbcTokenStore 的官方替代方案。

核心 Bean 配置

// 客户端信息存储(兼容原有 OAuth2 客户端配置)
@Bean
public RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) {
    return new JdbcRegisteredClientRepository(jdbcOperations);
}

// 授权与令牌存储核心服务
@Bean
public OAuth2AuthorizationService authorizationService(JdbcOperations jdbcOperations,
                                                       RegisteredClientRepository registeredClientRepository) {
    // 默认映射器,可自定义适配旧表结构
    OAuth2AuthorizationRowMapper rowMapper = new OAuth2AuthorizationRowMapper(registeredClientRepository);
    return new JdbcOAuth2AuthorizationService(jdbcOperations, rowMapper);
}

// 授权同意信息存储
@Bean
public OAuth2AuthorizationConsentService authorizationConsentService(JdbcOperations jdbcOperations,
                                                                     RegisteredClientRepository registeredClientRepository) {
    return new JdbcOAuth2AuthorizationConsentService(jdbcOperations, registeredClientRepository);
}

3. 整合授权服务器配置

将上述存储组件注入授权服务器的安全过滤链,确保授权流程使用 JDBC 存储令牌:

@Bean
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
    // 应用授权服务器默认安全配置
    OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
    
    // 注入自定义的授权存储服务
    OAuth2AuthorizationServerConfigurer configurer = http.getConfigurer(OAuth2AuthorizationServerConfigurer.class);
    configurer.authorizationService(authorizationService(jdbcOperations(), registeredClientRepository(jdbcOperations())))
              .authorizationConsentService(authorizationConsentService(jdbcOperations(), registeredClientRepository(jdbcOperations())));
    
    // 可选:如果需要资源服务器支持,配置JWT或令牌解析逻辑
    http.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()));
    
    return http.build();
}

4. 兼容原有数据库表结构(可选)

默认情况下,JdbcOAuth2AuthorizationService 使用官方新表结构(如 oauth2_authorization、oauth2_authorization_consent)。如果需要完全复用旧版 JdbcTokenStore 的表(如 oauth_access_token、oauth_refresh_token),可以:

  • 自定义 OAuth2AuthorizationRowMapper,实现旧表字段到 OAuth2Authorization 对象的映射
  • 或者编写自定义的 OAuth2AuthorizationService 实现类,直接操作旧表数据

内容的提问来源于stack exchange,提问作者SEJAL MIRANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:17:26