spring security AuthenticationManager vs AuthenticationProvider?

jr.*_*jr. 55 authentication spring spring-security

有人能告诉我一个AuthenticationManager和一个AuthenticationProviderSpring Security 之间的区别吗?

它们是如何使用的以及如何调用它们.我的理解是,一个SecurityFilter会调用对AuthenticationManager一个Authentication对象进行身份验证吗?但那么它在AuthenticationProvider哪里发挥作用?

谢谢!

Han*_*eek 36

我认为AuthenticationManager委托将持久用户信息提取到一个或多个AuthenticationProviders.身份验证提供程序(DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider例如)专门访问特定的用户信息存储库.参考手册的这一部分提到了其他一些内容.它说:

您可能希望使用ProviderManager注册其他AuthenticationProvider bean,并且可以使用带有ref属性的元素执行此操作,其中该属性的值是要添加的提供者bean的名称.

换句话说,您可以指定多个AuthenticationProviders,例如,一个在LDAP数据库中查找用户,另一个在SQL数据库中查找用户.

  • 你知道一些与自定义AuthenticationManager的实现示例的链接吗?我正在尝试实现一个简单的案例作为我更复杂的基础,但我无法弄清楚我应该在这个类中执行什么.我已经有一个AuthenticationProvider用于从数据库中检索用户数据. (3认同)
  • 因此,您很少需要实现 AuthenticationManager,而是只需实现 AuthenticationProviders 即可从您想要获取用户详细信息的任何位置获取用户详细信息? (2认同)

uir*_*han 10

从春季参考

AuthenticationManager只是一个接口,因此实现可以是我们选择的任何东西

Spring Security中的默认实现称为ProviderManager,它不是处理身份验证请求本身,而是委托给已配置的AuthenticationProvider列表,每个查询器依次查询它们是否可以执行身份验证.每个提供程序将抛出异​​常或返回完全填充的Authentication对象.

此外,如果您检查AuthenticationManager,ProviderManager和AuthenticationProvider的源代码,您可以清楚地看到这一点.

ProviderManager实现AuthenticationManager接口,它具有AuthenticationProviders列表.因此,如果您想拥有自定义身份验证机制,则需要实现新的AuthenticationProvider.


Reh*_*han 10

AuthenticationManager 和 AuthenticationProvider 都是接口。它们在 Spring Security Flow 中具有不同的功能。

Ref-
Spring Boot + Spring 安全架构

在此处输入图片说明

  • AuthenticationManager - 当用户尝试访问应用程序时,http 请求被过滤器/过滤器链拦截。使用创建的身份验证对象,过滤器将调用身份验证管理器的身份验证方法。Authentication Manager 只是一个接口,身份验证方法的实际实现是由 ProviderManager 提供的。ProviderManager 有一个 AuthenticationProviders 列表。它从它的身份验证方法调用适当的 AuthenticateProvider 的身份验证方法。如果身份验证成功,它会获取主体身份验证对象作为响应。

    在此处输入图片说明

  • AuthenticationProvider - AuthenicationProvider 是一个带有认证和支持方法的接口。它有各种实现,如 CasAuthenticationProvider 或 DaoAuthenticationProvider。根据实现,使用适当的 AuthenicationProvider 实现。它是在 AuthenticationProvider 实现身份验证方法中进行的所有实际身份验证。

    在此处输入图片说明