Springboot 3 中的活动目录

问题描述 投票:0回答:1

我正在尝试将基于 Springboot 2.1 的旧代码迁移到 Spring 3.0.8。

这包括 AD 集成。现在 Springboot 2.1 中的 AD 代码工作正常,但是当我迁移到 Springboot 3 时,它就停止工作并开始显示

org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]

尽管我没有对AD方面做任何改变。

这是我的旧代码 -

    @Autowired
    public void configure(AuthenticationManagerBuilder auth) throws Exception {

        ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider(domain,
                ldapUrls, ldapBaseDn);
        adProvider.setConvertSubErrorCodesToExceptions(true);
        adProvider.setUseAuthenticationRequestCredentials(true);

        if (ldapUserDnPattern != null && ldapUserDnPattern.trim().length() > 0) {
            adProvider.setSearchFilter("(&(objectClass=user)(sAMAccountName={1}))");
            // adProvider.setSearchFilter(ldapUserDnPattern);
        }

        auth.authenticationProvider(adProvider);
        auth.eraseCredentials(false);

    }

我的新代码没有太多变化,正如各种文档所建议的那样。

    @Bean
    public AuthenticationManager authManager(HttpSecurity http) throws Exception {
        ActiveDirectoryLdapAuthenticationProvider adProvider =
                new ActiveDirectoryLdapAuthenticationProvider(domain, ldapUrls,ldapBaseDn);
        
 
        adProvider.setConvertSubErrorCodesToExceptions(true);
        adProvider.setUseAuthenticationRequestCredentials(true);
        adProvider.setSearchFilter("(&(objectClass=user)(sAMAccountName={1}))");

        AuthenticationManagerBuilder authenticationManagerBuilder =
                http.getSharedObject(AuthenticationManagerBuilder.class);
        authenticationManagerBuilder.authenticationProvider(adProvider);
        return authenticationManagerBuilder.build();

我尝试实施各种策略和实施,但没有成功。

由于公司政策,我无法共享我的域、ldapUrls 和 ldapBaseDn,但它们在整个过程中都是相同的,并且我使用 Apache Directory Studio 检查了我的代码配置是否正确。

java spring spring-boot active-directory ldap
1个回答
0
投票

这似乎是一个直接的答案,但您传递的

ldapBaseDn
参数可能存在问题。

语法可能无效。 这里

帖子很旧了。

此外,我已将 LDAP 与 Spring 3.x 集成

参考代码

WebSecurityConfig Bean

@Bean
public LdapTemplate ldapTemplate(){
    return new LdapTemplate(ldapContextSource());
}
@Bean
public LdapContextSource ldapContextSource(){
    LdapContextSource ldapContextSource = new LdapContextSource();
    ldapContextSource.setPassword(pass);
    ldapContextSource.setUrl(url);
    ldapContextSource.setUserDn(userDn);
    return ldapContextSource;
}

 @Bean
AuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource) throws Exception {
    LdapBindAuthenticationManagerFactory ldapBindAuthenticationManagerFactory =
            new LdapBindAuthenticationManagerFactory(contextSource);
    ldapBindAuthenticationManagerFactory.setUserSearchBase(searchBase);
    ldapBindAuthenticationManagerFactory.setUserSearchFilter("(&(objectClass=user)(sAMAccountName={1}))");
    return ldapBindAuthenticationManagerFactory.createAuthenticationManager();
}

这可能会有帮助

如果有帮助,请将答案标记为正确

© www.soinside.com 2019 - 2024. All rights reserved.