我在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安装程序。
非常感谢任何帮助/推荐!
答案 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="(&(objectClass=user)(sAMAccountName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"/>
<property name="group-search-filter" value="(&(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)
希望你已经解决了这个问题,但以防万一:
我使用'objectCategory'代替'objectClass',因为我读过前者被索引,因此更快。
我必须添加此属性:
property name =“assign-groups”value =“域用户”
其中“域用户”是AD中用于放置所有用户的组。这必须与sun-web.xml中的值匹配,以进行安全角色映射。
稍后,我能够为此应用程序创建一个特定的组并进行适当的更改。
答案 2 :(得分:0)
试图解决这个问题令人抓狂...... Glassfish 3.0.1试图与Windows连接,并收到上述错误。
我根本不是Windows或LDAP高手......但终于找到了这个:
http://forum.springsource.org/showthread.php?t=87673
最后一行是密钥:使用“全局编目端口” - 而不是389,默认为3268。异常消失了。
为什么?
谁在乎?
(好吧,好的,我现在要读一读。)