当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Security在同一个请求中使用两个身份验证提供程序?

单于奇略
2023-03-14

我在应用程序中配置了两个身份验证提供程序,一个使用LDAP,另一个查看数据库:

<sec:authentication-manager>
    <sec:ldap-authentication-provider server-ref="ldapServer" />
    <sec:authentication-provider user-service-ref="dbUserDetailsService" />
</sec:authentication-manager>

Spring首先尝试使用LDAP,如果它在那里找不到用户,它会尝试我的自定义提供程序。

我想做的是强制Spring在所有可用的提供者中对用户进行身份验证。在这种情况下,它只会尝试我的自定义提供程序,前提是它可以先在LDAP服务器中执行登录。如果自定义提供程序中的身份验证失败,则整个身份验证将失败。

有可能通过Spring Security实现这一点吗?

共有1个答案

叶修永
2023-03-14

我认为您可以实现自己的身份验证提供程序,在其中注入两个实例——一个是LdapAuthenticationProvider,另一个是DaoAuthenticationProvider。您必须实现一个方法

public Authentication authenticate(Authentication authentication) throws AuthenticationException

在这里,您可以首先向LdapAuthenticationProvider调用代理身份验证,如果成功,则调用DAOAAuthenticationProvider。

 类似资料:
  • 我在调试身份验证问题时遇到了这个代码片段: 我在调试和摆弄用户凭证时注意到,如果第一个身份验证提供者(即< code > userdailsservice )无法对我的用户进行身份验证,那么就会远程调用我的LDAP服务器来尝试对我的用户进行身份验证。但是,如果第一个身份验证提供者成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供者。 我的问题是,列出这些身份验证提供者的工作方式是否使得如

  • 我正在尝试在Spring身份验证服务器(Spring Security)中配置多个身份验证提供程序(主要和次要) 根据“身份验证”方法留档: 返回:包含凭据的完全经过身份验证的对象。如果AuthenticationProvider无法支持对传递的身份验证对象的身份验证,则可能返回null。在这种情况下,将尝试下一个支持提供的身份验证类的AuthenticationProvider。 如果身份验证失

  • 问题内容: 我一直在使用HTTPClient版本4.1.2尝试通过需要基本身份验证的HTTP API访问REST。这是客户端代码: 当我构造一个请求时,像这样: 我在Charles Proxy中 看到有两个请求正在发送。一个不带标题,另一个 带 标题。如您所料,第一个失败的原因是401,但是第二个失败的情况却是201。 有谁知道为什么会这样吗?谢谢! 编辑: 我应该明确指出,我已经看过这个问题了,

  • 我正在尝试配置一个具有多种身份验证机制(DB和LDAP)并使用Spring Security性作为其底层框架的应用程序。我正在使用java配置来设置Web和http安全性。我知道我们需要多个WebSecurityConfigurerAdapter实例来存储多个http元素(如基于xml的config中使用的);但是当我这样做时,应用程序只选择配置的第一个身份验证(数据库身份验证),并且从不使用第二

  • 我正在使用React并尝试处理用户的密码更改。我正在发送一个如下的POST请求: ...我得到一个401错误:“未提供身份验证凭据”。 然而,如果我通过邮递员发送完全相同的请求,那么效果很好。 我也在同一个应用程序中执行GET请求以获取用户数据,它也可以毫无问题地工作: 可能是什么问题。。。?

  • 问题内容: 我的Web应用程序有多个身份验证管理器(一个用于API,一个用于WEB访问)。该api应该仅具有基本的身份验证服务- 通过spring安全标记进行配置,如下所示: 我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖。 我的问题是我无法在security:authentication-provider元素上定义别名/ id以在身份验证管理器中引用它。有一个简单的解决方法吗?