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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:37:32