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

Spring引导ldap安全

诸葛卜霸
2023-03-14

你好,我在使用Ldap创建简单登录时遇到问题。我已经从spring.io网站下载了入门项目:入门LDAP。

它可以很好地与ldif文件配合使用,但我想用运行ldap服务器来代替它。我已经试了好几天了,没有任何进展。我用这段代码获得了最好的结果(替换为getting started project的WebSecurity配置)

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
 
    @Override
    protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
        authManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailsService());
    }
 
    @Bean
    public AuthenticationManager authenticationManager() {
        return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
    }
    @Bean
    public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
        ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(null, "ldap://ip:port/", "ou=GROUP,dc=domain,dc=com");
        provider.setConvertSubErrorCodesToExceptions(true);
        provider.setUseAuthenticationRequestCredentials(true);
 
        return provider;
    }
}

如果我尝试使用格式为“用户名”“密码”的良好用户名和密码登录控制台输出:ActiveDirectoryLdapAuthenticationProvider:Active Directory身份验证失败:提供的密码无效

如果我使用“username@domain.com“和良好的密码,页面只是重新加载,没有输出到控制台。

如果使用随机用户名和密码控制台:Active Directory身份验证失败:提供的密码无效

有人能帮忙吗?

共有1个答案

暴辰龙
2023-03-14

正如评论中所建议的,我打开了日志记录,发现问题与“相同”username@domain.com“也是。

问题出在aciveDirectoryLdapAuthentiationProvider()中有3个问题。

  1. 我已经从rootDn中删除了OU组并添加了域,因此我们只能使用用户名登录。
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("domain.com", "ldap://ip:port/", "dc=domain,dc=com");
provider.setSearchFilter("(&(objectClass=user)(sAMAccountName={0}))");
return SpringSecurityLdapTemplate.searchForSingleEntryInternal(context,
                    searchControls, searchRoot, searchFilter,
                    new Object[] { bindPrincipal });    

替换为:

return SpringSecurityLdapTemplate.searchForSingleEntryInternal(context,
                searchControls, searchRoot, searchFilter,
                new Object[] { username }); 

完成aciveDirectoryLdapAuthenticationProvider:

    @Bean
    public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
        ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("domain.com", "ldap://ip:port/", "dc=domain,dc=com");  
        provider.setSearchFilter("(&(objectClass=user)(sAMAccountName={0}))");
        provider.setConvertSubErrorCodesToExceptions(true);
        provider.setUseAuthenticationRequestCredentials(true);
        return provider;
    }

有人能为第二/第三个问题提供更好的解决方案吗?也许更好的搜索过滤器?我在ldap中没有任何字段匹配“username@domain.com“使用ActiveDirectoryLdapAuthProvider的bindPrincipal格式。

 类似资料:
  • 我得到了一个Spring Boot2Reactive Web应用程序,它目前有一个基于JWT的身份验证系统。现在,我想添加一个LDAP后端用于身份验证,并通过Kerberos允许单点登录(SSO)。 似乎Kerberos和LDAP支持目前仅限于webmvc,没有专用的反应版本可用。 由于关于将所有3个组件(WebFlux,LDAP+Kerberos)集成到一个应用程序中的文档非常少,我想问一下是否

  • 这是我的安全配置代码: 但在编译spring时,仍在为我生成密码。 我通过print语句检查了配置是否正在加载,发现安全配置正在加载。我是否应该对给定的用户ID和密码进行任何更改。 提前感谢。

  • 在我们的Spring Boot应用程序中,我们使用对可以访问我们应用程序的用户进行身份验证。我们在身份验证功能上没有看到任何问题,但是当我们点击URL时,我们会得到LDAP的以下状态: 在跟踪此空指针异常时,我们在尝试访问时获得此跟踪: 最后,下面是我们的安全配置的样子: 现在我们确实在控制台中得到一条消息,说,但这是我们的预期,我们对此很满意。看来健康终点并不尊重这一点。我不知道这是我们的代码的

  • 但是当我使用web表单登录时,我会得到以下错误: 是否有类似于http://docs.spring.io/spring-security/site/docs/3.2.4.ci-snapshot/reference/htmlsingle/#ldap的文档解释如何在没有spring XML的情况下实现此功能?

  • 我是一个客户端项目的新手,它是通过oasp4j创建的,并且依赖于Spring Boot。 客户端项目,使用Spring Security、Spring MVC和登录是基于LDAP的AD,项目工作;我的任务是建立一个单一的用户身份验证(SSO),现在我找不到一个好的轨道来启动它。 我读过关于CAS、SAML、OAuth2、Waffle、SSOCircle和Kerberos的文章,但我不能真正选择其中

  • 我在我的应用程序中使用了Spring-Boot1.3.1和Spring-Boot-Actutor。我使用作为中的父级。 为了禁用安全性,我在中添加了2个条目。 它仍然没有禁用基本的安全性。当我在本地Tomcat中启动应用程序时,我看到日志文件中的默认密码。