Spring Cloud Azure升级5.x后JdbcOAuth2AuthorizedClientService失效问题
失效原因
自动配置逻辑变更
Spring Cloud Azure 4.x的AadWebSecurityConfigurerAdapter内部默认会自动关联自定义的OAuth2AuthorizedClientService到OAuth2登录流程中,但5.x版本改用AadWebApplicationHttpSecurityConfigurer后,这一自动绑定逻辑被移除,需要手动显式配置才能让登录流程使用你定义的JdbcOAuth2AuthorizedClientService实例。Spring Security版本适配问题
Spring Cloud Azure 5.x对应Spring Security 6.x版本,该版本的OAuth2登录配置更强调显式绑定授权客户端服务,不再像旧版本那样自动检测并关联OAuth2AuthorizedClientServiceBean。
解决方案
修改SecurityFilterChain配置,显式将JdbcOAuth2AuthorizedClientService绑定到OAuth2登录流程中,调整后的代码如下:
@Configuration(proxyBeanMethods = false) @EnableWebSecurity @EnableJdbcRepositories public class AzureOauthClientConfiguration { @Bean SecurityFilterChain filterChain(HttpSecurity http, OAuth2AuthorizedClientService authorizedClientService) throws Exception { http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication()) .and() .oauth2Login(oauth2 -> oauth2 .authorizedClientService(authorizedClientService) // 显式关联自定义授权客户端服务 ) .authorizeHttpRequests() .requestMatchers("/auth/**") .authenticated(); return http.build(); } @Bean JdbcOAuth2AuthorizedClientService oAuth2AuthorizedClientService(JdbcOperations jdbcOperations, ClientRegistrationRepository clientRegistrationRepository) { return new JdbcOAuth2AuthorizedClientService(jdbcOperations, clientRegistrationRepository); } }
额外检查点
- 确认数据库中
oauth2_authorized_client表结构符合Spring Security 6.x要求:如果是自动建表,JdbcOAuth2AuthorizedClientService会自动初始化表结构;若手动建表,需确保字段与新版本要求匹配。 - 确保
ClientRegistrationRepositoryBean正确加载:Spring Cloud Azure 5.x中通常通过spring.cloud.azure.active-directory相关配置自动注册该Bean,无需手动创建。
内容的提问来源于stack exchange,提问作者Chuck C
相关产品推荐
相关产品推荐

