0

次のシナリオ: 私の 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 を取得します。

質問:

  1. AbstractPreAuthenticatedProcessingFilterこのシナリオのアプローチは正しいですか? (私はhttp://springcert.sourceforge.net/sec-3/preauth.htmlのドキュメントを読みましたが、そうあるべきです)、
  2. はいの場合、リダイレクトを回避する方法は?
  3. そうでない場合、他の正しい方法で行うにはどうすればよいですか?
4

1 に答える 1