GlassFish 3.1 LDAP-Realm通过ActiveDirectory

时间:2011-08-17 13:55:31

标签: java java-ee active-directory glassfish

这里有一些关于这个主题的问题,但没有一个答案有帮助或线程似乎已经死了......所以这里又有另一个:

我正在尝试通过ActiveDirectory Server处理我的webapps的身份验证。 domain.xml中域的配置如下:

<auth-realm name="ActiveDirectory" classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm">
  <property description="null" name="directory" value="ldap://ad.local:389"></property>
  <property description="null" name="base-dn" value="DC=ad,DC=local"></property>
  <property name="jaas-context" value="ldapRealm"></property>
  <property name="assign-groups" value="Users"></property>
  <property name="search-filter" value="(&amp;(objectCategory=person)(objectClass=user)(sAMAccountName=%s))"></property>
  <property name="search-bind-password" value="topsecret"></property>
  <property name="group-search-filter" value="(&amp;(objectCategory=group)(member=%d))"></property>
  <property name="search-bind-dn" value="CN=read only,OU=@ServiceAccounts,DC=ad,DC=local"></property>
</auth-realm>

此外,此JVM-Option已设置(如许多教程中所述):

<jvm-options>-Djava.naming.referral=follow</jvm-options>

应用程序的web.xml设置为此(是的,非常基本的):

...
<security-constraint>
    <display-name>OnlyAD</display-name>
    <web-resource-collection>
        <web-resource-name>/SubgroupFacade</web-resource-name>
        <description/>
        <url-pattern>/SubgroupFacade</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <description/>
        <role-name>Users</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>ActiveDirectory</realm-name>
</login-config>
<security-role>
    <description/>
    <role-name>Users</role-name>
</security-role>
...

启动Glassfish工作正常。访问SubgroupFacade-Servlet也是如此:登录框出现了。我输入了有效的用户名和相应的密码......窗口再次出现。

日志显示原始连接和普通用户查找有效,但组查找失败,其中一个(可能是两个)异常:

WARNUNG: SEC1106: Error during LDAP search with filter [(&(objectCategory=group)(member=CN=Someuser Joe,OU=Users,OU=Fizzlecorp,DC=ad,DC=local))].
WARNUNG: SEC1000: Caught exception.
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=ad,DC=local'
...
WARNUNG: SEC1106: Error during LDAP search with filter [(&(objectclass=groupofuniquenames)(objectclass=*groupofurls*))].
WARNUNG: SEC1000: Caught exception.
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=ad,DC=local'
...

在外部应用程序中运行LDAP查询(例如终端上的简单ldapsearch)可以正常运行。我确实得到了Joe Someuser的所有团队。但是,第二个查询((&(objectclass=groupofuniquenames)(objectclass=*groupofurls*)))不会返回任何结果...而且我无法获得有关此查询应该执行的操作的任何信息。

我希望有人知道这里出了什么问题。自从今天早上上班以来,这个一直在殴打我(现在已经是下午晚些时候......)。

提前致谢! 本

1 个答案:

答案 0 :(得分:0)

添加到<auth-realm> 属性 <property name="java.naming.referral" value="follow"></property>

它帮助了我。