Spring Security LDAP:针对ApacheDS中的Active Directory绑定与身份验证

时间:2019-06-18 06:51:23

标签: active-directory apacheds spring-security-ldap

什么有效

我是根据我们公司的广告开发的:

@Bean
public AuthenticationProvider adProvider() {
    ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider(
            adConfig.getDomain(), adConfig.getUrl(), adConfig.getRootDn());

    adProvider.setSearchFilter(adConfig.getSearchFilter());
    adProvider.setUseAuthenticationRequestCredentials(true);
    adProvider.setConvertSubErrorCodesToExceptions(true);
    adProvider.setAuthoritiesMapper(authorities -> List.of(new FooAuthority("*")));

    return adProvider;
}

这确实有效;我可以使用公司凭证登录。 重要:我可以使用我的sAMAccountName(恰好也是我的uid)登录。

目标

现在,我想使用本地AD对某些极端情况进行一些自动化测试。我之所以选择ApacheDS是因为它具有跨平台的可用性,此外它还提供了一些Docker容器。我使用openmicroscopy/apacheds ,因为它看起来很活跃,有据可查且可配置,对于像我这样的菜鸟很重要。

问题

问题是,我无法登录。我在o.s.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider中将其追溯到两行:而searchForUser(ctx, username)中的doAuthentication(...)(5.0.12.RELEASE中的第148行)与我的sAMAccountName(如 foobar ),contextFactory.createContext(env)中的bindAsUser(...)(5.0.12.RELEASE中的第204行)需要完全限定的DN(如 cn = foobar,ou = people,dc = acme,dc = com )。

所以看来我这边有一些配置错误,可能是由于我的误解...似乎我确实需要一些其他用户进行身份验证,而不是之后进行搜索?我该如何配置,和/但为什么我们公司的AD可以正常工作? PS:我读到有关匿名身份验证的信息,也许我们公司允许这样做?但是根据公司的AD使用Apache Directory Studio要求我登录(据我所知)...

1 个答案:

答案 0 :(得分:1)

基于LDAP的简单BIND操作始终需要输入的专有名称(DN)和密码。只有AD允许使用samAccountName执行BIND操作。 AD有点特殊。