次のシナリオ: 私の Spring Boot 2.0 REST サービスは、Keycloak と通信する API Gateway を介して Angular 6 クライアントによって行われたリクエストを取得します。そのため、リクエストは認証済みのユーザーによって行われます (API Gateway によって行われます)。ユーザーとそのロールに関する情報は、リクエストの一部である JWT トークンにパックされます (ベアラー トークンを含む Authorization ヘッダー内)。
サービス側でトークンを処理するには?
TokenPreAuthenticatedProcessingFilter
次のように、 (に基づいてAbstractPreAuthenticatedProcessingFilter
)構成されたものを構築WebSecurityConfigurerAdapter
します。
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**")
.cors()
.and()
.authorizeRequests()
.mvcMatchers(HttpMethod.GET, "/health", "/info").anonymous()
.anyRequest().authenticated()
.and()
.addFilterBefore(tokenPreAuthenticatedFilter(), RequestHeaderAuthenticationFilter.class)
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.NEVER)
.and()
.csrf().disable();
ここまでは順調ですが、Controller のエンドポイントに到達 (および実行) すると、リクエストはリダイレクトされ、クライアントはデータではなくレスポンスとして HTTP ステータス コード 302 を取得します。
質問:
AbstractPreAuthenticatedProcessingFilter
このシナリオのアプローチは正しいですか? (私はhttp://springcert.sourceforge.net/sec-3/preauth.htmlのドキュメントを読みましたが、そうあるべきです)、- はいの場合、リダイレクトを回避する方法は?
- そうでない場合、他の正しい方法で行うにはどうすればよいですか?