L'utilisateur LDAP authentification par mot de passe en utilisant JNDI
public static void main(String[] args)
{
String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
String MY_HOST = "ldap://Localhost:1389";
String MGR_DN = "cn=John,ou=Users,o=IT,dc=QuizPortal";
String MGR_PW = "password";
//Identify service provider to use
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);
env.put(Context.PROVIDER_URL, MY_HOST);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, MGR_DN);
env.put(Context.SECURITY_CREDENTIALS, MGR_PW);
try
{
//Create the initial directory context
InitialDirContext initialContext = new InitialDirContext(env);
System.out.println("Context Sucessfully Initialized");
}
catch(Exception e)
{
System.err.println(e);
}
}
Je voudrais demander quand j'ai mis le MGR_DN = "cn=John,ou=Users,o=IT,dc=QuizPortal"
à MGR_DN = "uid=103,ou=Users,o=IT,dc=QuizPortal"
. Fondamentalement changer de cn, uid, je rencontre une erreur
javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
Je suis authentifié quand est spécifié comme cn=John
mais pas uid=103
. Ne suis-je pas autorisé à spécifier par uid?
OriginalL'auteur Nivek | 2010-08-11
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier le nom de domaine ou nom unique. C'est le nom de l'utilisateur est tenu que dans le répertoire. Vous ne pouvez pas il suffit de sélectionner toute la chaîne d'attributs. Si vos utilisateurs sont tenus par la 'cn' attribut alors que la 'cn' attribut fait partie de la DN.
Il dépend de l'annuaire LDAP. Certaines permettre aux autres de nommage des attributs dont les cas uid=103. Alors que d'autres ne le seront pas. Il n'est donc pas fiable.
OriginalL'auteur user207421
Si vous ne connaissez pas exactement le DN à l'avance, vous devriez faire une recherche dans l'annuaire LDAP en premier. Cela peut être fait plus ou moins comme ceci (assurez-vous d'attraper les exceptions pertinentes):
Ici, le filtre de recherche est
"(&(cn=" + identifier + "))"
(ainsi, par exemple(&(cn=John))
), mais vous pouvez utiliser lauid
à la place. La spécificité des résultats dépend de la configuration du serveur LDAP. Le DN de base dépend aussi de la façon dont il est mis en place (il pourrait êtreou=Users,o=IT,dc=QuizPortal
dans votre exemple).Qui va juste vous aider à obtenir le DN complet lorsque vous avez seulement l'uid ou cn, par exemple. Généralement, certains serveurs LDAP sont configurés unique liquides à travers une sous-arborescence. Faire la recherche vous aide à trouver le bon utilisateur. Par exemple, si vous avez organisé votre arborescence LDAP à disposer de plusieurs sous-arbres (
ou=Marketing
etou=Finances
par exemple), avecuid=user1,ou=Marketing,o=MyCompany
etuid=user2,ou=Finances,o=MyCompany
et configuré pour utiliser des uid uniques à traverso=MyCompany
, vous pouvez trouver le DN de l'utilisateur avecuid=user1
(qui, vous devez vous authentifier) à l'aide de ce genre de recherche.Hey merci pour le partage. Maintenant j'ai une meilleure compréhension de LDAP 🙂 Btw, votre morceau de code qui fonctionne comme un charme. Merci!
ATTENTION, sachez que cette mise en œuvre pourrait permettre aux utilisateurs de s'authentifier avec un mot de passe vide. Voir stackoverflow.com/questions/12359831/... . En fonction sur le serveur LDAP de mise en œuvre, vous aurez aussi besoin de vérifier que le mot de passe variable n'est pas vide.
C'est hors de ma tête, et 8 ans plus tard, de sorte que vous aurez besoin pour vérifier, mais aussi loin que je me souvienne, la première
new InitialDirContext(env)
rend la recherche et la deuxième (juste avantreturn true
) procède à l'authentification. Si l'authentification échoue, il doit lever une exception (et donc de ne pas atteindre la vraie).OriginalL'auteur Bruno
Il ressemble à un problème de configuration du serveur. Voici un problème similaire, y compris une solution. Fondamentalement, vous aurez à spécifier si l'utilisation de
uid
oucn
pour l'authentification dansldap-authentication.properties
.OriginalL'auteur Andreas_D