Spring Boot管理员:访问此资源需要完全认证

时间:2018-07-24 19:03:17

标签: spring-boot spring-security microservices spring-boot-admin

我们将netflix oss用于微服务的反向代理和安全性,我们遵循此处https://www.jhipster.tech/microservices-architecture/所述的jhipster模式,其中来自UI应用程序的请求将转到网关(即Api网关),并将该请求代理到我们的后端微服务,我们正在使用jwt进行身份验证,我们想要一个仪表板来监视在eureka服务器上注册的微服务和api网关,我们启动了一个单独的spring boot管理服务器,以便它在eureka服务器上注册并轮询微服务和网关以获取指标端点,但是我们正在例外

  

访问此资源需要完整身份验证

由在API网关和微服务级别过滤jwts的过滤器抛出, 我们也尝试过禁用

management.security.enabled: false 

但是仍然没有运气,请帮助我指导我进行哪些更改才能使Spring Boot admin成功轮询微服务和api网关?

我尝试了以下方法

首先,我启用了web.ignoring()。antMatchers(“ / actuator / **”),这样弹簧安全性会忽略执行器端点,但是这种方法会冒我的api的风险

第二个想法:

如果我在spring security中启用了2个过滤器,则第一个过滤器将用于spring boot admin,并对执行器端点进行基本身份验证,第二个过滤器将通过jwt身份验证其余的api和下游api的可行性?

我启用了2个过滤器,其中一个过滤器用于执行器端点,一个过滤器用于api,但是这些过滤器工作正常,但无法连接到SBA

public class SpringSecurityAdminFilter extends WebSecurityConfigurerAdapter {



@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {

       String password = passwordEncoder().encode("xxxx");
    auth.inMemoryAuthentication().passwordEncoder(passwordEncoder()).withUser("sam").password(password).roles("ADMIN");

}

@Bean
public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

@Override
protected void configure(HttpSecurity http) throws Exception {

  http.csrf().disable()
    .authorizeRequests()
    .antMatchers("/actuator/**").hasRole("ADMIN")
    .and().httpBasic()
    .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);//We don't need sessions to be created.
}


}

2 个答案:

答案 0 :(得分:0)

我为Spring Boot管理服务器启用了基本身份验证,在微服务中添加了该属性

eureka.instance.metadata-map.user.name: 
eureka.instance.metadata-map.user.password:

现在执行器端点受到基本身份验证的保护

答案 1 :(得分:0)

我有一个类似的问题。在我的spring boot应用程序中,我们有一个cors过滤器来阻止Http Head请求。因此,无法从Spring Boot管理员接受head请求。

  • 检查过滤器是否阻止了HEAD Http请求。

  • 还需要在application.properties中设置management.security.enabled = false。