【问题标题】:GlassFish Security Realm, Active Directory and ReferralGlassFish 安全领域、Active Directory 和推荐
【发布时间】:2010-04-28 18:04:00
【问题描述】:

我在 Glassfish 中设置了一个安全领域,以针对 Active Directory 服务器进行身份验证。领域的配置如下:

Class Name: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
JAAS context:  ldapRealm
Directory: ldap://172.16.76.10:389/
Base DN:  dc=smallbusiness,dc=local
search-filter: (&(objectClass=user)(sAMAccountName=%s))
group-search-filter: (&(objectClass=group)(member=%d))
search-bind-dn: cN=Administrator,CN=Users,dc=smallbusiness,dc=local
search-bind-password: abcd1234!

领域功能正常,我可以登录,但是当我登录时,我会在日志中收到以下错误:

SEC1106: Error during LDAP search with filter [(&(objectClass=group)(member=CN=Administrator,CN=Users,dc=smallbusiness,dc=local))].
SEC1000: Caught exception.
    javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'dc=smallbusiness,dc=local'
        at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2820)
        ....
        ....
ldaplm.searcherror

在寻找解决方案时,我发现建议将java.naming.referral=follow 添加到领域的属性中。但是,在我添加此内容后,GlassFish 需要 20 分钟才能针对 Active Directory 进行身份验证。我怀疑这是 Active Directory 服务器上的 DNS 问题。 Active Directory 服务器是虚拟机中的普通 Windows Server 2003 设置。

非常感谢任何帮助/建议!

【问题讨论】:

    标签: java active-directory glassfish


    【解决方案1】:

    这是我在 domain.xml 文件中使用的配置,您可能会感兴趣:

    <auth-realm classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm" name="ldapRealm"> 
          <property name="search-bind-password" value="Demodemo01"/> 
          <property name="search-bind-dn" value="Administrator"/> 
          <property name="search-filter" value="(&amp;(objectClass=user)(sAMAccountName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"/> 
          <property name="group-search-filter" value="(&amp;(objectClass=group)(member=%d))"/> 
          <property name="jaas-context" value="ldapRealm"/> 
          <property name="base-dn" value="CN=Users,DC=saierp,DC=net"/> 
          <property name="directory" value="ldap://192.168.1.38:389"/> 
    </auth-realm>
    

    特别是,请确保将userAccountControl 添加到您的过滤器中,否则,AD 中的禁用帐户将被允许连接。

    【讨论】:

      【解决方案2】:

      试图解决这个问题真是令人抓狂...... Glassfish 3.0.1 试图与 Windows 连接,并得到上述错误。

      我根本不是 Windows 或 LDAP 专家……但我终于找到了这个:

      http://forum.springsource.org/showthread.php?t=87673

      最后一行是关键:使用“全局目录端口”——默认为 3268,而不是 389。异常消失了。

      为什么?

      谁在乎?

      (好吧,好吧,我现在就去读一读。)

      【讨论】:

        【解决方案3】:

        希望您已经解决了这个问题,但以防万一:

        1. 我使用“objectCategory”代替“objectClass”,因为我读到前者被索引,因此速度更快。

        2. 我必须添加这个属性:

          property name="assign-groups" value="域用户"

        其中“域用户”是我们所有用户所在的 AD 组。这必须与 sun-web.xml 中用于安全角色映射的值匹配。

        后来,我能够为此应用程序创建一个特定的组并进行适当的更改。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-12
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多