从 Spring Cloud Azure 4.x 迁移到 5.x 后,JdbcOAuth2AuthorizedClientService 似乎不再保存“OAuth2 授权客户端”。
之前的4.6代码:
@EnableWebSecurity
@Configuration
@EnableJdbcRepositories
public class AzureOauthClientConfiguration extends AadWebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.antMatchers("/auth/**")
.authenticated();
}
@Bean
JdbcOAuth2AuthorizedClientService oAuth2AuthorizedClientService(JdbcOperations jdbcOperations, ClientRegistrationRepository clientRegistrationRepository) {
return new JdbcOAuth2AuthorizedClientService(jdbcOperations, clientRegistrationRepository);
}
}
和 5.x 等效项:
@Configuration(proxyBeanMethods = false)
@EnableWebSecurity()
@EnableJdbcRepositories
public class AzureOauthClientConfiguration {
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
.and()
.authorizeHttpRequests()
.requestMatchers("/auth/**")
.authenticated();
return http.build();
}
@Bean
JdbcOAuth2AuthorizedClientService oAuth2AuthorizedClientService(JdbcOperations jdbcOperations, ClientRegistrationRepository clientRegistrationRepository) {
return new JdbcOAuth2AuthorizedClientService(jdbcOperations, clientRegistrationRepository);
}
}
两个 AAD 类的内部代码看起来实际上是等效的。有关如何使其工作或为什么它不再工作的任何指示?
不确定这是否是最好/正确的方法,但将以下 bean 添加到配置中有效:
@Bean
public OAuth2AuthorizedClientRepository authorizedClientRepository(OAuth2AuthorizedClientService authorizedClientService) {
return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(authorizedClientService);
}