マイクロサービスのリバース プロキシとセキュリティに netflix oss を使用しています。ここで言及されている jhipster パターンに従っていますhttps://www.jhipster.tech/microservices-architecture/ 。ここで、UI アプリケーションからのリクエストは Api ゲートウェイであるゲートウェイに送られ、バックエンド マイクロサービスへのリクエストをプロキシします。認証に jwt を使用しています。マイクロサービスと eureka サーバーに登録する API ゲートウェイを監視するダッシュボードが必要でした。別の Spring Boot 管理サーバーを開始して、eureka サーバーに登録し、マイクロサービスをポーリングしました。メトリクスエンドポイントのゲートウェイですが、例外が発生しています
このリソースにアクセスするには、完全な認証が必要です
これは、API ゲートウェイ レベルとマイクロサービス レベルの両方で jwt をフィルタリングするフィルターによってスローされます。また、無効にしようとしました
management.security.enabled: false
しかし、まだ運がありません。Spring Boot管理者がマイクロサービスとAPIゲートウェイを正常にポーリングできるようにするために必要な変更をガイドするのを手伝ってもらえますか?
私は次のアプローチを試しました
最初に、web.ignoring().antMatchers("/actuator/**") を有効にして、スプリング セキュリティによってアクチュエータ エンドポイントが無視されるようにしましたが、このアプローチは API のリスクを冒します
2番目のアイデア:
spring security で 2 つのフィルターを有効にすると、最初のフィルターはアクチュエーター エンドポイントの基本認証を使用するスプリング ブート管理者用になり、2 番目のフィルターは残りのすべての API とダウンストリーム API の jwt 認証になります。
アクチュエータ エンド ポイント用の 1 つのフィルタと API 用の 1 つのフィルタの 2 つのフィルタを有効にしましたが、これらのフィルタは完全に機能していますが、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.
}
}