Spring Security 中用于身份验证的通用身份验证过滤器

Posted

技术标签:

【中文标题】Spring Security 中用于身份验证的通用身份验证过滤器【英文标题】:Generic Authentication Filter in Spring Security used for Authentication 【发布时间】:2022-01-20 10:00:03 【问题描述】:

我是 Spring Security 的新手,想更好地了解身份验证过程

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

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

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

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

【问题讨论】:

您从研究中描述的一切都是正确的。不幸的是,我不清楚这个问题。您能否详细说明问题?注意:Spring Security 使用FilterChainProxySecurityFilterChain 列表,而不是CompositeFilter 我的主要问题是关于身份验证过程的接口FilterSecurityFilterChain最常用的类(实现) 【参考方案1】:

SecurityFilterChain 有一个实现,DefaultSecurityFilterChain

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

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

【讨论】:

以上是关于Spring Security 中用于身份验证的通用身份验证过滤器的主要内容,如果未能解决你的问题,请参考以下文章

用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP

基于 Spring Security 令牌的身份验证

基于 SAML 的 SSO 用于身份验证和 LDAP 用于授权 - Spring Boot Security

在 Spring Security 中接收令牌的基本身份验证

如何使用spring security使用空密码进行基本身份验证?

Spring Security 3.1.4 taglib 授权/身份验证不适用于 Tomcat 7 上 JSF 2.2 中的角色层次结构