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

Spring Security:针对多个LDAP服务器进行身份验证

戈宏义
2023-03-14

我正在开发一个Springboot应用程序,该应用程序需要支持本地(通过基于DAO的提供程序)和多个LDAP服务器(管理配置,存储在数据库中)进行身份验证。

对于单个LDAP提供程序,我的配置方法如下所示:

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(daoAuthenticationProvider());
auth.ldapAuthentication()
        .userSearchBase(userSearchBase)
        .groupSearchBase(groupSearchBase)
        .userSearchFilter(userSearchFilter)
        .userDetailsContextMapper(new DaoUserDetailsContextMapper())
        .contextSource().url(url+"/"+base)
        .managerPassword(managerPassword)
        .managerDn(managerDn);
  }

通过其他类似的帖子,这似乎可以通过创建多个LDAP提供者来实现,Spring security将在每个提供者之间循环,直到找到成功的登录。我将关联的LDAP配置记录作为外键关联到用户表上。

有没有更有效的方法来尝试与用户相关联的特定LDAPendpoint,或者最好让Spring遍历可用的提供者?

感谢您的任何输入!

共有1个答案

闻人望
2023-03-14

经过长时间的搜索,我发现了一些关于Spring Security authentification工作原理的有趣的东西(有一个视频:https://youtu.be/caCJAJC41Rk?t=781)

之后,您可以使用Spring实现的系统,该系统是覆盖支持(class

通过这种方式,您可以实现自己的CustomAuthentificationProvider,它实现了身份验证提供者接口。

public class LocalUserAuthenticationProvider implements AuthenticationProvider {

    private final UserRepository;

    public LocalUserAuthenticationProvider(UserRepository userRepository){
        this.userRepository = userRepository;
    }

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        /*my jobs*/
        throws new AuthenticationException("Cannot authenticate");
    }

    @Override
    public boolean supports(Class<?> aClass) {
        return MyUsernameAuthenticationToken.class.isAssignableFrom(aClass);
    }
}

使用您自己的身份验证令牌

public class StringUsernameAuthenticationToken extends UsernamePasswordAuthenticationToken {

    public StringUsernameAuthenticationToken(Object principal, Object credentials) {
        super(principal, credentials);
    }

    public StringUsernameAuthenticationToken(Object principal, Object credentials, Collection<? extends GrantedAuthority> authorities) {
        super(principal, credentials, authorities);
    }
}

我找不到任何解决方案和LDAP

希望这可以帮助人们

 类似资料:
  • 它总是导致带有错误消息的catch块 登录失败:未知的用户名或错误的密码。失败:未知的用户名或错误的密码。 我确信给定的密码是正确的。 如何使用给定的密码验证用户名?

  • 问题内容: 如何使用Python + LDAP针对AD进行身份验证。我目前正在使用python-ldap库,它所产生的只是眼泪。 我什至不能绑定执行简单的查询: 运行此命令会给我两个错误之一: -输入错误或故意使用错误的凭据时,它无法通过身份验证。 ldap.INVALID_CREDENTIALS:{‘info’:‘80090308:LdapErr:DSID-0C090334,评论:AcceptS

  • 我有一个Spring MVC应用程序(使用3.0.5版本),需要使用Spring LDAP绑定到Active Directory,以便简单且仅验证用户的凭据。该应用程序托管在Linux服务器上,因此我需要一个跨平台的解决方案。并且应用程序不使用Spring Security性。 在此设置中实现用户身份验证的有效方法是什么?Active Directory支持FastBind控件(id=

  • 在使用普通windows RDP客户端连接用户之前,我需要根据远程桌面服务网关验证用户名和密码输入,因为在凭据无效的情况下,我需要覆盖RDP客户端的默认UI行为,并且我无法使用LDAP或其他服务,因为它必须在网络之外工作只有RDS网关可用。 除此之外,我还没有找到多少关于RDS网关API的文档:http://msdn.microsoft.com/en-us/library/ee672219(v=v

  • 我正在尝试用.NET中的LDAP制作一个简单的身份验证系统。我检查了.NET中的一些名称空间,并简单地制作了标准代码片段,如下所示。 我有一个管理员用户名和密码和,用于对客户端应用程序进行身份验证。我有第二个用户名和密码和,需要在LDAP中检查才能登录。 是管理帐户,只是LDAP中的用户。那么如何检查的密码呢?

  • 我试图让我们的所有组织用户使用他们的LDAP域凭据登录到Jenkins。使用下面的选项,只有1个特定OU下的用户才能登录。我想提供多个OU进行搜索。 我们的Active Directory结构如下: ca->美国->用户->实际用户id ca->印度->用户->实际用户id 目前,只有属于美国OU的用户才能成功登录到该应用程序。我希望来自美国和印度的用户能够成功登录。我认为将用户搜索库和组搜索库都