我正在尝试使用嵌入式弹簧LDAP服务器配置使用spring安全框架实现LDAP身份验证和数据库授权。我在尝试登录时收到以下错误消息:结果代码:(INVALID_CREDENTIALS)invalidCredentials
问题是:当我使用配置1然后登录问题,但如果我使用配置2,那么它的工作原理。请求帮助:
<security:authentication-manager>
<security:authentication-provider ref="ldapActiveDirectoryAuthProvider" />
</security:authentication-manager>
<bean id="ldapActiveDirectoryAuthProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg>
<bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="appLdapServer" />
<property name="userDnPatterns">
<list>
<value>uid={0},ou=users</value>
</list>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="com.smd.security.UserServiceBean" />
</constructor-arg>
</bean>
<security:ldap-server id="appLdapServer" ldif="/WEB-INF/conf/mojo.ldif" root="o=mojo" port="007" />
<security:authentication-manager>
<security:ldap-authentication-provider
user-search-filter="(uid={0})" user-search-base="ou=users"
group-search-filter="(uniqueMember={0})" group-search-base="ou=groups"
group-role-attribute="cn" role-prefix="ROLE_">
</security:ldap-authentication-provider>
</security:authentication-manager>
<security:ldap-server id="appLdapServer" ldif="/WEB-INF/conf/mojo.ldif" root="o=mojo" port="007" />
dn: o=mojo
objectClass: organization
objectClass: extensibleObject
objectClass: top
o: mojo
dn: ou=users,o=mojo
objectClass: extensibleObject
objectClass: organizationalUnit
objectClass: top
ou: users
dn: cn=John Milton,ou=users,o=mojo
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: John Milton
sn: Milton
uid: jmilton
userPassword:: cGFzcw==
(密码通过)
我可以在LDAP服务器日志中看到正在传递正确的密码。
感谢您阅读本文。 阿米特
答案 0 :(得分:1)
在第一个配置中,您告诉BindAuthenticator
使用特定模式uid={0}
作为LDAP DN,而实际上它根本不是从uid
属性构建的,但是使用公共名称(cn=John Milton
)。
这与您使用搜索具有特定uid
属性的用户的第二种配置不同。
您应该从usedDnsPatterns
配置中删除BindAuthenticator
,然后配置搜索bean,如reference manual中所述:
<bean
class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="appLdapServer"/>
<property name="userSearch" ref="userSearch" />
</bean>
<bean id="userSearch"
class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg index="0" value="ou=users"/>
<constructor-arg index="1" value="(uid={0})"/>
<constructor-arg index="2" ref="appLdapServer" />
</bean>