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

Spring Authorization Server自定义Well-Known端点请求转发问题求助

Spring Authorization Server 3.3.1 自定义OIDC Well-Known端点解决方案

针对你遇到的自定义端点无法命中过滤器、请求被重定向到登录页的问题,按以下步骤排查修复:

1. 替换默认过滤器而非前置添加

不要用addFilterBefore简单插入,先移除默认的OidcProviderConfigurationEndpointFilter,再注册自定义过滤器,避免请求被默认过滤器先拦截:

@Bean
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
    // 应用默认授权服务器安全配置
    OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);

    // 移除默认的OIDC配置端点过滤器
    FilterChainProxy filterChainProxy = http.getSharedObject(FilterChainProxy.class);
    filterChainProxy.getFilterChains().forEach(chain ->
        chain.getFilters().removeIf(filter -> filter instanceof OidcProviderConfigurationEndpointFilter)
    );

    // 初始化自定义过滤器,注入必要依赖
    CustomOidcProviderConfigurationEndpointFilter customFilter = new CustomOidcProviderConfigurationEndpointFilter(
        http.getSharedObject(OidcProviderConfigurationService.class),
        http.getSharedObject(OAuth2AuthorizationServerMetadata.class)
    );
    // 设置自定义路径的请求匹配器
    AntPathRequestMatcher customMatcher = new AntPathRequestMatcher("/oauth2/token/.well-known/openid-configuration");
    customFilter.setRequestMatcher(customMatcher);
    customFilter.setFilterProcessesUrl(customMatcher.getPattern());

    // 将自定义过滤器添加到授权端点过滤器之前
    http.addFilterBefore(customFilter, OAuth2AuthorizationEndpointFilter.class);

    // 配置端点权限:允许所有请求访问自定义well-known端点
    http.authorizeHttpRequests(auth -> auth
        .requestMatchers(customMatcher).permitAll()
        .anyRequest().authenticated()
    );

    return http.build();
}

2. 修正权限配置顺序

请求被重定向到登录页,大概率是permitAll()的配置顺序错误——必须把自定义端点的权限规则放在anyRequest().authenticated()之前,否则会被全局认证规则覆盖。

3. 简化响应属性修改(无需复制整个过滤器)

如果只是要移除响应中的部分属性,没必要完全复制OidcProviderConfigurationEndpointFilter,直接自定义OidcProviderConfigurationService更简洁:

@Bean
public OidcProviderConfigurationService customOidcProviderConfigService(OAuth2AuthorizationServerMetadata serverMetadata) {
    return request -> {
        // 只构建需要保留的属性,自动移除不需要的字段
        return OidcProviderConfiguration.builder()
            .issuer(serverMetadata.getIssuer())
            .authorizationEndpoint(serverMetadata.getAuthorizationEndpoint())
            .tokenEndpoint(serverMetadata.getTokenEndpoint())
            .jwksUri(serverMetadata.getJwksUri())
            // 按需添加或移除属性
            .build();
    };
}

4. 验证过滤器执行顺序

Spring Security过滤器链按顺序执行,确保自定义过滤器在认证类过滤器(比如UsernamePasswordAuthenticationFilter)之前执行,避免请求被拦截后重定向到登录页。可以通过调整addFilterBefore的第二个参数来指定位置。

内容的提问来源于stack exchange,提问作者Suvin Nimnaka Sukka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:11