通过LdapExtLoginModule针对Active Directory林进行身份验证(LDAP_REFERRAL)

时间:2014-09-09 07:20:54

标签: java authentication active-directory ldap wildfly

有没有办法通过任何Ldap登录模块或任何其他特殊模块对Active Directory Forest 进行身份验证?

在standalone.xml中具有以下配置:

    <module-option name="java.naming.provider.url" value="ldap://ad.company.tld:389"/ >
    <module-option name="baseCtxDN" value="OU=DE,OU=Users,OU=Accounts,OU=US,OU=Hosting,DC=ad00,DC=company,DC=tld"/ >
    <module-option name="baseFilter" value="(CN={0})"/ >
    <module-option name="rolesCtxDN" value="OU=Groups,OU=Accounts,OU=US,OU=Hosting,DC=ad00,DC=company,DC=tld"/ >
    <module-option name="roleFilter" value="(member={1})"/>
    <module-option name="roleAttributeID" value="CN"/ >
    <module-option name="searchScope" value="SUBTREE_SCOPE"/>

在wildfly 8上我得到一个带有完整堆栈跟踪指向的javax.naming.NameNotFoundException 到LdapCtx.java:3112看起来如下:

case LdapClient.LDAP_REFERRAL:
    e = new NamingException(message);
    break;

因此,异常是由于推荐错误,看起来LDAP模块不能遵循引用控制。而且,我找到了

http://docs.oracle.com/javase/jndi/tutorial/ldap/referral/jndi.html注意(在底部):

Windows Active Directory:由于Active Directory不支持“管理引荐”控件,因此本课程中的所有示例都不适用于Active Directory。

因此我猜LdapExtLoginModule没有成功的机会如果它依赖于Java提供的JNDI。

1 个答案:

答案 0 :(得分:1)

WildFly中的引荐处理存在一些问题。它们已在代码库中修复。一旦9.x流中的新版本发布,它应该适合您。

JBoss EAP 6.3和6.2.4存在问题fixed already

处理(即跟随)推荐的配置可能如下所示:

<security-domain name="ldap-authn" cache-type="default">
  <authentication>
    <login-module code="LdapExtended" flag="required">
      <module-option name="java.naming.provider.url" value="ldap://test-ldap.jboss.example:389/"/>
      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
      <module-option name="java.naming.security.authentication" value="simple"/>
      <module-option name="bindDN" value="cn=Directory Manager"/>
      <module-option name="bindCredential" value="****"/>
      <module-option name="baseCtxDN" value="dc=example,dc=com"/>
      <module-option name="baseFilter" value="(uid={0})"/>
      <module-option name="rolesCtxDN" value="dc=example,dc=com"/>
      <module-option name="roleFilter" value="(uniqueMember={1})"/>
      <module-option name="roleAttributeID" value="cn"/>
      <module-option name="roleNameAttributeID" value="cn"/>
      <module-option name="roleRecursion" value="0"/>
      <module-option name="throwValidateError" value="true"/>
      <module-option name="java.naming.referral" value="follow"/>
      <module-option name="referralUserAttributeIDToCheck" value="uniqueMember"/>
    </login-module>
  </authentication>
</security-domain>