Spring SecurityのAuthenticationManager
とAuthenticationProvider
の違いを誰かに教えてもらえますか?
それらはどのように使用され、どのように呼び出されますか。 SecurityFilter
がAuthenticationManager
を呼び出してAuthentication
オブジェクトを認証するというのは私の理解です。しかし、AuthenticationProvider
はどこで機能するのでしょうか。
ありがとう!
AuthenticationManager
は、永続的なユーザー情報のフェッチを1つ以上のAuthenticationProvider
sに委任すると思います。認証プロバイダー(DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider
例)特定のユーザー情報リポジトリへのアクセスを専門としています。それ以外は、リファレンスマニュアルの この部分 で言及されています。それは言う:
ProviderManagerで追加のAuthenticationProvider Beanを登録することができ、ref属性を持つ要素を使用してこれを行うことができます。属性の値は、追加するプロバイダーBeanの名前です。 。
つまり、LDAPデータベースでユーザーを探すものや、SQLデータベースで探すものなど、複数のAuthenticationProvidersを指定できます。
春から 参考
AuthenticationManagerは単なるインターフェースであるため、実装は任意に選択できます
Spring Securityのデフォルトの実装はProviderManagerと呼ばれ、認証リクエスト自体を処理するのではなく、構成済みのAuthenticationProviderのリストに委任します。それぞれのリストは、認証を実行できるかどうかを確認するために順にクエリされます。各プロバイダーは、例外をスローするか、完全に入力された認証オブジェクトを返します。
また、AuthenticationManager、ProviderManager、AuthenticationProviderのソースコードを確認すると、これがはっきりとわかります。
ProviderManagerはAuthenticationManagerインターフェースを実装し、AuthenticationProvidersのリストを持っています。したがって、カスタム認証メカニズムが必要な場合は、新しいAuthenticationProviderを実装する必要があります。