spring cloud OAuth资源服务器默认user用户问题

当使用@EnableOauth2Resource标志应用为spring cloud OAuth 的资源服务器时,发现日志打印了:

Using default security password: aa20bbc8-00ec-4584-8351-d7c9aa60d534

这是因为当classpath中有Spring Security时,web应用会启用一个默认的安全配置,即AuthenticationManager会配置一个默认用户,用户名为user,密码为一个随机的uuid,并在应用启动时打印INFO级别的日志。

这个user用户虽然建了但是在资源服务器里是不会启用的,当没有access token访问api时,仍然会报401(没有权限).

相关的spring cloud源码:
org.springframework.boot.autoconfigure.security.AuthenticationManagerConfiguration

@Order(Ordered.LOWEST_PRECEDENCE - 100)
    private static class SpringBootAuthenticationConfigurerAdapter
            extends GlobalAuthenticationConfigurerAdapter {

        private final SecurityProperties securityProperties;

        SpringBootAuthenticationConfigurerAdapter(SecurityProperties securityProperties) {
            this.securityProperties = securityProperties;
        }

        @Override
        public void init(AuthenticationManagerBuilder auth) throws Exception {
            auth.apply(new DefaultInMemoryUserDetailsManagerConfigurer(
                    this.securityProperties));
        }

    }

DefaultInMemoryUserDetailsManagerConfigurer里初始化了一个默认用户user:

private static class DefaultInMemoryUserDetailsManagerConfigurer
            extends InMemoryUserDetailsManagerConfigurer<AuthenticationManagerBuilder> {

        private final SecurityProperties securityProperties;

        DefaultInMemoryUserDetailsManagerConfigurer(
                SecurityProperties securityProperties) {
            this.securityProperties = securityProperties;
        }

        @Override
        public void configure(AuthenticationManagerBuilder auth) throws Exception {
            if (auth.isConfigured()) {
                return;
            }
            User user = this.securityProperties.getUser();
            if (user.isDefaultPassword()) {
                logger.info(String.format("%n%nUsing default security password: %s%n",
                        user.getPassword()));
            }
            Set<String> roles = new LinkedHashSet<String>(user.getRole());
            withUser(user.getName()).password(user.getPassword())
                    .roles(roles.toArray(new String[roles.size()]));
            setField(auth, "defaultUserDetailsService", getUserDetailsService());
            super.configure(auth);
        }
}

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容