最新の安定バージョンについては、Spring Security 6.4.2 を使用してください! |
基本認証
このセクションでは、Spring Security がサーブレットベースのアプリケーションで基本 HTTP 認証 [IETF] (英語) をどのようにサポートするかについて詳しく説明します。
Spring Security 内で HTTP 基本認証がどのように機能するかを見てみましょう。最初に、WWW 認証 [IETF] (英語) ヘッダーが認証されていないクライアントに送り返されるのを確認します。
この図は、SecurityFilterChain
ダイアグラムから構築されています。
最初に、ユーザーが認可されていないリソース /private
に対して認証されていないリクエストを行います。
Spring Security の FilterSecurityInterceptor
は、認証されていないリクエストが AccessDeniedException
をスローすることによって拒否されたことを示します。
ユーザーが認証されていないため、ExceptionTranslationFilter
は Start Authentication を開始します。構成された AuthenticationEntryPoint
は、WWW-Authenticate ヘッダーを送信する BasicAuthenticationEntryPoint
(Javadoc) のインスタンスです。RequestCache
は通常、クライアントが最初にリクエストしたリクエストを再生できるため、リクエストを保存しない NullRequestCache
です。
クライアントは、WWW-Authenticate ヘッダーを受信すると、ユーザー名とパスワードで再試行する必要があることを認識します。以下は、処理中のユーザー名とパスワードのフローです。
この図は、SecurityFilterChain
ダイアグラムから構築されています。
ユーザーがユーザー名とパスワードを送信すると、BasicAuthenticationFilter
は HttpServletRequest
からユーザー名とパスワードを抽出して Authentication
の一種である UsernamePasswordAuthenticationToken
を作成します。
次に、UsernamePasswordAuthenticationToken
が AuthenticationManager
に渡され、認証されます。AuthenticationManager
がどのように見えるかの詳細は、ユーザー情報がどのように保存されているかによって異なります。
認証に失敗した場合、Failure
SecurityContextHolder はクリアされます。
RememberMeServices.loginFail
が呼び出されます。設定されていないことを覚えていれば、これはノーオペレーションです。AuthenticationEntryPoint
が呼び出され、WWW-Authenticate が再度送信されます。
認証が成功した場合は、Success .
認証は SecurityContextHolder に設定されます。
RememberMeServices.loginSuccess
が呼び出されます。設定されていないことを覚えていれば、これはノーオペレーションです。BasicAuthenticationFilter
はFilterChain.doFilter(request,response)
を呼び出して、残りのアプリケーションロジックを続行します。
Spring Security の HTTP 基本認証のサポートはデフォルトで有効になっています。ただし、サーブレットベースの構成が提供されるとすぐに、HTTP Basic を明示的に提供する必要があります。
最小限の明示的な構成を以下に示します。
Java
XML
Kotlin
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) {
http
// ...
.httpBasic(withDefaults());
return http.build();
}
<http>
<!-- ... -->
<http-basic />
</http>
@Bean
open fun filterChain(http: HttpSecurity): SecurityFilterChain {
http {
// ...
httpBasic { }
}
return http.build()
}