Spring 中用于身份验证的安全性中的通用身份验证过滤器

Generic Authentication Filter in Spring Security used for Authentication

我是 Spring 安全方面的新手,想更好地了解身份验证过程

这是我在网上找到的与该主题相关的内容,如果我在过程中有错误,请告诉我:

  1. 身份验证过程从 Filter 开始,可能是 FilterChain 的一部分。过滤器可能是 UsernamePasswordAuthenticationFilter 类型。 HTTP 请求被拦截并尝试创建 Authentication Request(实现 Authentication 接口的 class 对象,即 UsernamePasswordAuthenticationToken)。
  2. Authentication 对象被委托给 AuthenticationManager
  3. 根据传递给 AuthenticationManager 的内容,它将其委托给适当的 AuthenticationProvider(即 DaoAuthenticationProvider),在那里进行真实身份验证。
  4. AuthenticationProvider 将完全验证的 Authentication 对象发送到 AuthenticationManager
  5. 在调用 AuthenticationManagerFilter 中,调用 SecurityContextHolder.getContext().setAuthentication(authResult); 并完成身份验证过程。

我的问题是关于 Filter class 和与身份验证相关的 FilterChain 的具体实现。

在我们的应用程序中,大多数身份验证过滤器扩展 AbstractAuthenticationProcessingFilter 并且 FilterChain 是 class CompositeFilter。这个接口事实上的“正确”实现是什么?对于这样一个愚蠢的问题,我提前表示歉意,但仍然需要学习这个概念。

SecurityFilterChain 有一个实现,DefaultSecurityFilterChain

Filter 的实现太多,无法将一种实现视为最常见。 Spring 安全性中扩展 AbstractAuthenticationProcessingFilter 的可用身份验证过滤器是 UsernamePasswordAuthenticationFilterOAuth2LoginAuthenticationFilterSaml2WebSsoAuthenticationFilter

要使用的“正确”过滤器在很大程度上取决于您的用例。