LDAP将用户密码存储为明文还是编码文本



我正在阅读这篇春季LDAP集成文章:https://spring.io/guides/gs/authenticating-ldap/

本文包含一个示例LDIF文件,其中的密码以明文形式显示。

dn: uid=bob,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Bob Hamilton
sn: Hamilton
uid: bob
userPassword: bobspassword

但是这个用户的密码是加密的

dn: uid=ben,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Ben Alex
sn: Alex
uid: ben
userPassword: $2a$10$c6bSeWPhg06xB1lvmaWNNe4NROmZiSpYhlocU/98HNr2MhIOiSt36

所以只是想知道,这是LDAP服务器上可配置的东西吗。为什么一个用户的密码是加密的,而其他用户的密码是否加密?


How Ever,我看到这个例子中的spring安全性被配置为使用BCrypt密码编码器。

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url("ldap://localhost:8389/dc=springframework,dc=org")
.and()
.passwordCompare()
.passwordEncoder(new BCryptPasswordEncoder())
.passwordAttribute("userPassword");
}

并且建议登录的演示用户是密码为CCD_ 2的CCD_。我只是想知道如果我以另一个用户的身份登录会发生什么,我想我应该被拒绝,因为spring使用bcrypt,而ldap中其他用户的密码没有编码。

这将取决于LDAP服务器,特别是密码的处理方式。但是,是的,它们通常以某种加密/哈希的方式存储。例如,在Oracle目录服务器中,密码策略具有";密码存储方案";其控制密码的存储方式。在某些目录服务器中,可以以明文形式存储用户密码。在这种情况下,任何对密码具有读取权限的人都可以从用户帐户中提取密码。我从没见过在沙盒外设置的东西。

您正在查看的LDIF将密码作为明文提供给服务器,但服务器会在将其存储在对象上之前,根据服务器/密码策略配置对值进行哈希/加密。

最新更新