我正在针对LDAP服务器在JBoss 7上的应用程序上尝试设置身份验证。以下是我为配置所遵循的链接
LDAP authentication with JBoss 7
LDAP登录模块对LDAP服务器执行三次查询以登录用户,如下所示:
根据JBoss in Action,JBoss LDAP登录模块的工作原理有3个步骤: - 第一个查询仅使用登录ID查找用户对象。此搜索类似于我们之前向您展示的第一个ldapsearch查询。 - 第二个查询是使用用户的登录ID和密码的登录尝试。 - 最后一个查询获取组对象。 使用密码,但您不必在登录模块中引用它。现在让我们来看看另一个有助于简化开发和测试的登录模块。
查看LDAP服务器日志,看起来我的设置只是执行第一步而不是第二步。因此登录失败并出现密码错误:
10:47:11,448 DEBUG [org.jboss.security](http- / 127.0.0.1:9080-1)PBOX000283:用户名testuser1的密码错误 10:47:11,450 TRACE [org.jboss.security](http- / 127.0.0.1:9080-1)PBOX000244:开始中止方法 10:47:11,450 DEBUG [org.jboss.security](http- / 127.0.0.1:9080-1)PBOX000206:登录失败:javax.security.auth.login.FailedLoginException:PBOX000070:密码无效/需要密码 在org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:286)[picketbox-4.1.1.Final-redhat-1.jar:4.1.1.Final-redhat-1]
以下是我的standalone.xml中的配置:
<security-domain name="LDAPAuth" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://localhost:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="bindDN" value="cn=admin"/>
<module-option name="bindCredential" value="********"/>
<module-option name="baseCtxDN" value="ou=Internal,cn=Users,dc=company,dc=local"/>
<module-option name="baseFilter" value="(cn={0})"/>
<module-option name="roleFilter" value="(uniqumember={1})"/>
<module-option name="allowEmptyPasswords" value="false"/>
<module-option name="Context.REFERRAL" value="follow"/>
<module-option name="throwValidateError" value="true"/>
<module-option name="roleRecursion" value="0"/>
<module-option name="searchScope" value="SUBTREE_SCOPE"/>
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="Context.REFERRAL" value="follow"/>
<module-option name="throwValidateError" value="true"/>
</login-module>
</authentication>
</security-domain>