GlassFish安全领域,活动目录和推荐

时间:2010-04-28 18:04:01

标签: java active-directory glassfish

我在Glassfish中设置了一个Security Realm来对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服务器是虚拟机中的vanilla Windows Server 2003安装程序。

非常感谢任何帮助/推荐!

3 个答案:

答案 0 :(得分: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中的已禁用帐户将被允许连接。

答案 1 :(得分:0)

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

  1. 我使用'objectCategory'代替'objectClass',因为我读过前者被索引,因此更快。

  2. 我必须添加此属性:

    property name =“assign-groups”value =“域用户”

  3. 其中“域用户”是AD中用于放置所有用户的组。这必须与sun-web.xml中的值匹配,以进行安全角色映射。

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

答案 2 :(得分:0)

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

我根本不是Windows或LDAP高手......但终于找到了这个:

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

最后一行是密钥:使用“全局编目端口” - 而不是389,默认为3268。异常消失了。

为什么?

谁在乎?

(好吧,好的,我现在要读一读。)