4

私のプロジェクトでは春のセキュリティoauthを使用しています。私は春のセキュリティResourceServerConfigurerAdapterで設定することによって、認証からいくつかのURLを除外しています。私はhttp.authorizeRequests().antMatchers(url).permitAll()を追加しました。spring security permitトークンが無効な場合、承認ヘッダーで渡されたトークンはまだ考慮され、401が返されます。

私が見ているのは、これらのURLにAuthorizationヘッダーを渡さないと、認証されていないということです。 APIは適切に呼び出されます。

呼び出しがAuthorizationヘッダーで行われた場合、トークンが検証され、トークンが検証されない場合は呼び出しが失敗します。

私はpermitAllを持っているリクエストでトークンが無視されるようにするために何をする必要がありますか?

+0

解決策を見つけましたか? –

答えて

3

Spring OAuth2は、ヘッダ:Authorization Bearer xxxを持つすべてのURLをインターセプトします。

Spring OAuth2がURLを傍受しないようにするには私は、SpringのOAuth2設定よりも高次のSecurityConfigurationを作成しました。

@Configuration 
@EnableWebSecurity 
@Order(1) // this is important to run this before Spring OAuth2 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    @Bean 
    public AuthenticationManager authenticationManagerBean() throws Exception { 
     return super.authenticationManagerBean(); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     List<RequestMatcher> requestMatchers = new ArrayList<RequestMatcher>(); 
     // allow /api/public/product/** and /api/public/content/** not intercepted by Spring OAuth2 
     requestMatchers.add(new AntPathRequestMatcher("/api/public/product/**")); 
     requestMatchers.add(new AntPathRequestMatcher("/api/public/content/**")); 

    http 
     .requestMatcher(new OrRequestMatcher(requestMatchers)) 
    .authorizeRequests() 
     .antMatchers("/api/public/product/**", "/api/public/content/**").permitAll() 
    } 
} 

以上の構成は、この構成がより高い@Orderを有するので**この構成によって、しないばねのOAuth2によって処理される//API /パブリック/製品/ **及び/ API /パブリック/コンテンツを可能にします。

したがって、無効なトークンを上記のapi呼び出しに設定しても、無効なアクセストークンは発生しません。

+0

この回答は受け入れられるべきです。 – meobeo173

+1

しかし、トークンが有効であれば、認証されたユーザーを取得することはできません。 – meobeo173

+0

@ meobeo173はい、私が言ったように、私はauthサーバーからuserInfoを得ることができません。そこで、 'user-info-url'エンドポイントをapi-serverに切り替えます。 – Cataclysm

関連する問題