Spring Authorization Server登录报错:No AuthenticationProvider found
修复“No AuthenticationProvider found”错误方案
问题根源
使用spring-boot-starter-oauth2-authorization-server搭建授权服务器时,登录阶段触发该错误,核心原因是授权服务器无法获取到用于验证用户凭证的AuthenticationProvider,本质是Spring Security配置与授权服务器配置未正确衔接。
具体修复步骤
1. 调整Spring Security配置(SecurityConfig)
确保配置UserDetailsService提供用户数据,并暴露AuthenticationManager供授权服务器调用:
@Configuration @EnableWebSecurity public class SecurityConfig { // 配置内存用户(生产环境可替换为数据库实现) @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withUsername("user") .password("{noop}password") // {noop}标记明文密码,生产需替换为BCrypt等加密方式 .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } // 暴露AuthenticationManager Bean @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception { return config.getAuthenticationManager(); } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .formLogin(Customizer.withDefaults()); // 启用表单登录流程 return http.build(); } }
2. 修正授权服务器配置(AuthorizationServerConfig)
注入AuthenticationManager并绑定到授权服务器端点,确保密码模式等认证流程能获取到认证提供者:
@Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { private final AuthenticationManager authenticationManager; // 构造注入AuthenticationManager public AuthorizationServerConfig(AuthenticationManager authenticationManager) { this.authenticationManager = authenticationManager; } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client") .secret("{noop}secret") .authorizedGrantTypes("password", "authorization_code", "refresh_token") .scopes("read", "write"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { // 将AuthenticationManager绑定到端点,支持密码模式的用户认证 endpoints.authenticationManager(authenticationManager); } }
3. 核对application.yaml配置
确保用户配置无冲突,若使用内存用户,可保留或替换为上述UserDetailsService的显式配置:
spring: security: user: name: user password: password
验证修复
重启授权服务器后,访问登录页面输入账号密码,即可正常完成认证流程,不再出现“No AuthenticationProvider found”错误。
内容的提问来源于stack exchange,提问作者user27800978
相关产品推荐
相关产品推荐

