在使用Spring配置LDAP身份验证时遇到麻烦。
使用LDAP Apache Directory Studio,我与LDAP服务器具有以下工作连接:
Bind DN or USER: cn=HIDDEN_USERNAME,OU=HIDDEN_OU1,OU=HIDDEN2,OU=Admin,DC=MY_COMPANYNAME,DC=COM
Authorization ID: SASL PLAIN only
Bind Password: ******
使用此连接,我可以在根目录下找到我的帐户:
Root DSE/DC=MY_COMPANYNAME,DC=COM/OU=User Accounts/OU=Enabled Users/OU=Consultants/CN=MySurname My Name
右键单击我的帐户会给出以下值:
DN: CN=MySurname MyName,OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM
URL: ldap://IP_ADRESS:389/CN=MySurname%20MyName,OU=Consultants,OU=Enabled%20Users,OU=User%20Accounts,DC=MY_COMPANYNAME,DC=COM
我将配置 WebSecurityConfigurerAdapter 以便通过ldap服务器通过以下方式获得身份验证:
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns("CN={0},OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM")
.contextSource()
.url("ldap://IP_ADRESS:389/")
.managerDn("HIDDEN_USERNAME")
.managerPassword("*****")
.and()
.passwordCompare()
.passwordEncoder(new LdapShaPasswordEncoder())
.passwordAttribute("userPassword");
}
我试图以多种方式设置userDnPattern,但没有结果。我在做什么错了?
答案 0 :(得分:0)
使用您指定的DN模式,需要使用用户ID“ MySurname MyName”进行登录尝试(并且空格可能是一个问题)。用户提供的登录ID字符串将插入到上面包括的DN模式中,并且将与
绑定double
与您的完全合格的DN匹配的名称。如果您希望使用自己的ID而不是组成CN的姓氏/名称字符串登录,或者如果需要验证的帐户存在于多个OU位置,则userSearch可能比DN模式更可取。
如果您要针对Active Directory域进行身份验证,则可以使用{0}@domain.gTLD或DOMAIN {0}作为用户模式-提供登录ID时,这些模式形成userPrincipalName和分别为sAMAccountName。
答案 1 :(得分:0)
针对您的上述评论:Active Directory隐藏了密码字段,即使域管理员也无法读取。
我同意其他用户的意见,即对于AD,您需要使用用户搜索过滤器;如果要针对用户名使用过滤器,则应使用samaccountname={0}