spring security ldap隐藏密码属性

Posted

技术标签:

【中文标题】spring security ldap隐藏密码属性【英文标题】:spring security ldap hidden password attribute 【发布时间】:2017-09-25 09:24:24 【问题描述】:

如果我的 ldap OU 的密码属性被隐藏了,会不会有问题?在 Spring Security 中我必须做一些额外的配置吗?如果我目前的 ldap 结构如下:

test cn密码属性是隐藏的,如何配置spring security做ldap认证?

目前我已将其配置为:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception 
    auth
        .ldapAuthentication()

            .userDnPatterns(USER_DN_PATTERNS)
            .groupSearchBase("ou=groups")
            .contextSource(contextSource())
            .passwordCompare()
                .passwordEncoder(new LdapShaPasswordEncoder())
                .passwordAttribute("UnicodePwd");


@Bean
public DefaultSpringSecurityContextSource contextSource() 
    DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(Arrays.asList(LDAP_URL), BASE_DN);
    contextSource.setUserDn(USER_DN);
    contextSource.setPassword(USER_PASSWORD);
    return contextSource;

DN 如下:

private static final String USER_DN_PATTERNS  = "OU=Usuarios";
private static final String BASE_DN = "dc=mutualser," + "dc=org";

但是当我尝试进行身份验证时,我得到一个 NO_ATTRIBUTE_OR_VAL 错误(我确定这是密码属性的名称)

【问题讨论】:

【参考方案1】:

如果未指定密码,Spring security 将假定密码为 un​​icodePwd。

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception 
    auth
        .ldapAuthentication()
            .userSearchFilter("(sAMAccountName=0)")
            .groupSearchBase("ou=Mutual Ser")
            .contextSource(contextSource());

验证就好了

【讨论】:

以上是关于spring security ldap隐藏密码属性的主要内容,如果未能解决你的问题,请参考以下文章

登录表单用户凭据而不是 LDAP Spring Security 中的硬编码 UserDn 和密码

Spring Security Ldap验证userDn和登录表单中的密码

Spring 3,Spring Security,LDAP,如何向 LDAP 添加角色?

使用 Spring Security 通过 MySQL-LDAP-Thymeleaf 登录

Spring Security 和 LDAP MD5 认证

如何使用带有 LDAP 的 Spring Security 获取用户信息