2012-01-13 48 views
1

我试图在Glassfish 3.1上实现ldapRealm。我可以通过以下配置正常登录,但是我无法正确获取AD的组成员身份。我跟着group memberships in (AD) ldap Realm包括group-search-filter但仍然无法正常工作。
这里是我的web.xml:Glassfish 3.1 ldapRealm ActiveDirectory组成员

<auth-realm name="ADREALM" classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm"> 
    <property name="directory" value="ldap://domain.com:389"></property> 
    <property name="search-filter" value="(&amp;(objectCategory=user)(sAMAccountName=%s))"></property> 
    <property name="search-bind-dn" value="[email protected]"></property> 
    <property description="null" name="base-dn" value="OU=CORP Users,DC=domain,DC=com"></property> 
    <property name="group-search-filter" value="(&amp;(objectCategory=group)(member=%d))"></property> 
    <property name="search-bind-password" value="password"></property> 
    <property name="jaas-context" value="ldapRealm"></property> 
</auth-realm> 

我还添加以下选项服务器配置> JVM

-Djava.naming.referral=follow 

GlassFish的日志条目:

FINE: [Web-Security] hasUserDataPermission perm: (javax.security.jacc.WebUserDataPermission /j_security_check POST) 
FINE: [Web-Security] hasUserDataPermission isGranted: true 
FINEST: Processing login with credentials of type: class com.sun.enterprise.security.auth.login.common.PasswordCredential 
FINE: Logging in user [kip] into realm: ADREALM using JAAS module: ldapRealm 
FINE: Login module initialized: class com.sun.enterprise.security.auth.login.LDAPLoginModule 
FINE: search: baseDN: OU=CORP Users,DC=domain,DC=com filter: (&(objectCategory=user)(sAMAccountName=kip)) 
FINE: Found user DN: CN=Kipling,OU=IT,OU=CORP Users,DC=domain,DC=com 
FINE: LDAP:Group search filter: (&(objectCategory=group)(member=CN=Kipling,OU=IT,OU=CORP Users,DC=domain,DC=com)) 
FINE: LDAP: Group memberships found: 
FINE: LDAP: login succeeded for: kip 
FINE: JAAS login complete. 
FINE: JAAS authentication committed. 
FINE: Password login succeeded for : kip 
FINE: Set security context as user: kip 

注意发现集团成员是空的。请让我知道是否需要更多信息。

回答

4

在上周末,我找出了我的ldapRealm配置出了什么问题。既然我把我的base-dn设置为用户分支,并且组信息在不同的分支上,那么glassfish找不到我的组dn。 (限制太多 - 也是由SO的问题之一提到)。为了得到group-search-filter的工作,我不得不添加额外的属性到ldapRealm,这是group-base-dn组数据检索。

<property name="group-base-dn" value="OU=CORP Groups,DC=domain,DC=com"></property> 

所以,除非我把我的base-dn基本DC=domain,DC=com我必须包括group-base-dn财产。这是我最后的ldapRealm配置:

<auth-realm name="ADREALM" classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm"> 
    <property name="directory" value="ldap://domain.com:389"></property> 
    <property name="jaas-context" value="ldapRealm"></property> 
    <property name="base-dn" value="OU=CORP Users,DC=domain,DC=com" description="null"></property> 
    <property name="search-filter" value="(&amp;(objectCategory=user)(sAMAccountName=%s))"></property> 
    <property name="group-base-dn" value="OU=CORP Groups,DC=domain,DC=com"></property> 
    <property name="group-search-filter" value="(&amp;(objectCategory=group)(member=%d))"></property> 
    <property name="search-bind-dn" value="[email protected]"></property> 
    <property name="search-bind-password" value="password"></property> 
</auth-realm> 

我希望这可以帮助任何人配置ldapRealm。谢谢!

附带的GlassFish日志:

FINE: search: baseDN: OU=CORP Users,DC=domain,DC=com filter: (&(objectCategory=user)(sAMAccountName=kip)) 
FINE: Found user DN: CN=Kipling,OU=IT,OU=CORP Users,DC=domain,DC=com 
FINE: LDAP:Group search filter: (&(objectCategory=group)(member=CN=Kipling,OU=IT,OU=CORP Users,DC=domain,DC=com)) 
FINE: LDAP: Group memberships found: Application Administrators 
FINE: LDAP: login succeeded for: kip 
FINE: JAAS login complete. 
FINE: JAAS authentication committed. 
0

objectClass=Group,而不是objectCategory=group在您的搜索筛选条件。

+0

嗨,我读了另一个问题,SO,他们是完全一样的,唯一的objectCategory索引。我也在'ldapsearch'上试了他们两个并生成相同的输出。 – KipKapKup 2012-01-16 04:39:35