Java LDAP - Déterminer si l'utilisateur dans un groupe donné?
Nous avons d'ouverture de session des utilisateurs d'Active Directory via LDAP en utilisant le Java API LDAP. Nous voulons améliorer notre ouverture de session de la fonctionnalité en outre vérifier si l'utilisateur est dans un groupe d'ANNONCES. Personne ne sait comment faire cela?
Code actuel:
import javax.naming.*;
import javax.naming.ldap.*;
LdapContext ctx = null;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.PROVIDER_URL, Config.get("ldap-url"));
try {
Control[] connCtls = new Control[] {new FastBindConnectionControl()};
ctx = new InitialLdapContext(env, connCtls);
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, "DOMAIN\\" + username);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);
ctx.reconnect(connCtls);
/* TODO: Only return true if user is in group "ABC" */
return true; //User authenticated
} catch (Exception e) {
return false; //User could NOT be authenticated
} finally {
...
}
Mise à jour: Voir la solution ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Nous avons résolu ce problème avec la classe ci-dessous. Il suffit d'appeler la méthode d'authentification:
Aucun des ci-dessus des extraits de code n'a pas fonctionné pour moi. Après 1 journée de dépenses sur Google et tomcat source code suivant bien travaillé pour trouver des groupes d'utilisateurs.
La façon la plus simple est avec "recherche": (pour ouvrir un Ldap Contexte: regardez les exemples ci-dessus)
LDAP méthodes de recherche de déterminer si un utilisateur est membre d'un groupe ne sont pas correctes, surtout si vous parlez d'un utilisateur connecté. Pour un utilisateur qui est connecté sur la liste des groupes varie en fonction de l'ordinateur de l'utilisateur connecté. Cette liste doit inclure les groupes du domaine des fiducies, des groupes imbriqués et groupes locaux.
Si vous êtes à la recherche pour les adhésions du groupe de l'utilisateur actuellement connecté ou un utilisateur que vous êtes en connexion avec un nom d'utilisateur et le mot de passe en Java, essayez Gaufre.
Pas sûr au sujet de l'API Java détails, mais le générique façon de le faire est d'ajouter un groupe de vérifier pour la requête/liaison.
Je ne peux pas vous donner un code de travail à l'aide de java naming ldap.
J'ai utilisé le Printemps LDAP, et la façon dont vous le faites:
Obtenez de l'Utilisateur de l'objet, de faire une recherche sur le nom d'utilisateur à quelque chose comme sAMAccountName=nom d'utilisateur
Après que vous obtenez l'objet de récupérer les biens memberOf -> ce sera une liste et vérifier pour l'un spécifique à Java.
C'est la seule façon que je pouvais penser.
Malheureusement, la réponse varie avec les installations de l'ANNONCE ainsi que d'autres types de serveur LDAP.
Nous avons eu à résoudre le même problème. Au final, nous avons permis à l'administrateur système pour nous fournir une requête LDAP-modèle où l'on substitue le nom de l'utilisateur (et le nom de groupe si cela doit être trop variable) dans le modèle.
J'ai trouvé ce utile:
extrait-groupe-adhésion pour Active Directory
Et j'ai ce morceau de code de travail:
Aussi vous pouvez modifier la accepté de répondre à partir d'ici: L'authentification Active Directory avec Java sur Linux avec les éléments suivants: