2010-04-28 2 views
1

J'ai installé un domaine de sécurité dans Glassfish pour m'authentifier auprès d'un serveur Active Directory. La configuration du royaume est la suivante:Domaine de sécurité GlassFish, Active Directory et référence

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! 

Le royaume est fonctionnel et je peux vous identifier, mais chaque fois que je me connecte j'obtenir l'erreur suivante dans le journal:

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 

Bien que En cherchant une solution, j'ai trouvé qu'il était recommandé d'ajouter java.naming.referral=follow aux propriétés du domaine. Cependant, après avoir ajouté ceci, il faut 20 minutes à GlassFish pour s'authentifier auprès d'Active Directory. Je suspecte que c'est un problème de DNS sur le serveur d'Active Directory. Le serveur Active Directory est une installation de Windows Server 2003 dans une machine virtuelle.

Toute aide/recommandation est fortement appréciée!

Répondre

0

C'était furieux d'essayer de résoudre ce problème ... Glassfish 3.0.1 essayant de se connecter avec Windows, et obtenir l'erreur ci-dessus.

Je ne suis pas un as Windows ou LDAP du tout ... mais finalement trouvé ceci:

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

Et la dernière ligne est la clé: utiliser le « catalogue global Port » - au lieu de 389, c'est 3268 par défaut. Et l'exception disparaît.

Pourquoi?

Qui s'en soucie?

(. Bien, ok, je vais lire maintenant)

0

Espérons que vous avez résolu, mais juste au cas où:

  1. J'utilise « objectCategory » à la place de « objectClass » que je lis les premiers sont indexés, donc plus rapide.

  2. J'ai dû ajouter cette propriété:

    property name = valeur "assign-groupes" = "Les utilisateurs du domaine"

où "Les utilisateurs de domaine" est le groupe AD que tous nos utilisateurs sont placés dans. Cela doit correspondre à la valeur de sun-web.xml pour le mappage de rôle de sécurité.

Plus tard, j'ai été en mesure de créer un groupe spécifique pour cette application et apporter les modifications appropriées.

1

Voici la configuration que je l'utilise dans mon fichier domain.xml, il pourrait être de quelque interrest vous:

<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> 

Spécialement, assurez-vous d'ajouter le userAccountControl à votre filtre, sinon, les comptes désactivés dans AD seront autorisés à se connecter.