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

Spring Boot OAuth2不透明令牌安全自动配置未生效问题

Spring OAuth2不透明令牌授权默认行为失效问题解答

问题背景

我正尝试使用Spring配置OAuth2不透明令牌授权。根据Spring官方文档:

如果应用未暴露SecurityFilterChain Bean,Spring Boot会提供上述默认的Bean。
但我无需任何授权令牌即可访问端点,因此不得不手动添加SecurityFilterChain:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(authorize -> authorize
            .anyRequest().authenticated()
        )
        .oauth2ResourceServer(OAuth2ResourceServerConfigurer::opaqueToken);
    return http.build();
}

另一方面,文档提到:

如果应用未暴露OpaqueTokenIntrospector Bean,Spring Boot会提供上述默认的Bean。
然而,启动服务时却出现如下错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Method filterChain in slab.tsystems.multipart.commonsupload.config.SecurityConfiguration required a bean of type 'org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector' in your configuration.

相关依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-resource-server</artifactId>
</dependency>
<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>oauth2-oidc-sdk</artifactId>
    <version>10.7.2</version>
    <scope>runtime</scope>
</dependency>

问题原因

1. 默认SecurityFilterChain失效的本质

Spring Boot的默认安全配置是通过@ConditionalOnMissingBean(SecurityFilterChain.class)触发的——只要你手动定义了自己的SecurityFilterChain Bean,自动配置的默认链就会被完全替换。这就是你之前能无令牌访问端点的原因:之前没有自定义安全配置,Spring Boot的默认安全链未启用严格认证。

2. 默认OpaqueTokenIntrospector未生成的关键

文档里的“默认提供OpaqueTokenIntrospector”有前提:必须让Spring Boot获取到令牌自省的必要配置信息,或是在它自动配置整个资源服务器链路时才会生成。

当你手动构建SecurityFilterChain并调用.oauth2ResourceServer(opaqueToken)时,相当于告诉Spring Security要手动配置不透明令牌逻辑,此时Spring会要求必须有OpaqueTokenIntrospector Bean处理令牌自省验证,但你既没在配置文件中指定自省端点、客户端ID/密钥,也没手动定义这个Bean,因此启动时抛出找不到Bean的错误。

解决方案

方案一:通过配置文件自动生成Bean

在application.properties(或application.yml)中添加不透明令牌自省的核心配置:

# 令牌自省端点地址
spring.security.oauth2.resourceserver.opaquetoken.introspection-uri=https://你的认证服务器地址/oauth2/introspect
# 自省用的客户端ID
spring.security.oauth2.resourceserver.opaquetoken.client-id=你的客户端ID
# 自省用的客户端密钥
spring.security.oauth2.resourceserver.opaquetoken.client-secret=你的客户端密钥

添加这些配置后,Spring Boot会自动创建DefaultOpaqueTokenIntrospector Bean,你的SecurityFilterChain即可正常工作。

方案二:手动定义OpaqueTokenIntrospector Bean

如果不想用配置文件,可直接在配置类中手动创建Bean:

@Bean
public OpaqueTokenIntrospector opaqueTokenIntrospector() {
    OAuth2IntrospectionClientCredentials credentials = 
        new OAuth2IntrospectionClientCredentials("你的客户端ID", "你的客户端密钥");
    return new NimbusOpaqueTokenIntrospector(
        "https://你的认证服务器地址/oauth2/introspect", 
        credentials
    );
}

你的依赖中已包含com.nimbusds:oauth2-oidc-sdk,可直接使用Nimbus的实现类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:53:23