Spring Oauth2 に基づく認証サーバーを開発しています。UserDetails
カスタム実装 (およびその他のカスタム コンポーネント) を介してカスタム データをトークンに追加し、認証サーバーのユーザーをアプリケーションのエンティティにマップできるようにしました。
アプリケーション バックオフィスは、管理インターフェイスを介した新しいユーザーの作成もサポートします。このため、 で始まるいくつかのエンドポイントを開いています/users
。
この ednpoints には、信頼範囲を持つ認証済みクライアントのみがアクセスできるようにしたいと考えています。したがって、これらのエンドポイントへのリクエストは、Client Credentials Grant を介して取得された有効なトークンを含むAuthorization
ヘッダーを提供することが期待されます。Bearer
を拡張して、これらのエンドポイントのセキュリティを構成しようとしましたWebSecurityConfigurerAdapter
。configure(HttpSecurity http)
メソッドと結果のさまざまなバージョンを次に示します。
http.csrf().disable().authorizeRequests().antMatchers("/users/**").permitAll();
これは機能します!しかし、確保されていません。
http.csrf().disable().authorizeRequests().antMatchers("/users/**").authenticated();
失敗!認証を行うフィルターが適用されていないようで、403 Forbidden
応答が返ってきます。または、認証されたクライアントを示唆する他の構成に置き換えauthenticated()
ても、同じことが起こります。hasRole(...)
hasAuthority(...)
問題は、信頼されたスコープを持つクライアントに対してエンドポイントを保護するようにエンドポイントを構成するにはどうすればよいかということです。