我们将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.
}
}
答案 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。