2009-10-01 6 views
0

Je veux juste ajouter une nouvelle méthode sur un code existant ci-dessous. La méthode est simplement de vérifier un donné ID utilisateur s'il existe sur l'AD.LDAP | Vérifiez si l'ID utilisateur existe sur l'AD

C'est ma première fois avec AD.

public class AD 
{ 
    // Fields 
    private static string ADPassword = ConfigurationManager.AppSettings["ADPassword"].ToString(); 
    private static string ADPath = ConfigurationManager.AppSettings["ADConnection"].ToString(); 
    private static string ADServerName = ConfigurationManager.AppSettings["ADServerName"].ToString(); 
    private static string ADUserName = ConfigurationManager.AppSettings["ADUserName"].ToString(); 

    // Methods 
    public static string GetLogin(string sUserName, string sPassword) 
    { 
     try 
     { 
      DirectoryEntry entry = new DirectoryEntry(ADPath, ADServerName + sUserName, sPassword); 
      object nativeObject = entry.NativeObject; 
      return string.Empty; 
     } 
     catch 
     { 
      return "Invalid Username or Password"; 
     } 
    } 

    public static string Update(string sUserName, string sOldPassword, string sNewPassword) 
    { 
     string message; 
     try 
     { 
      DirectoryEntry searchRoot = new DirectoryEntry(); 
      searchRoot.Path = ADPath; 
      searchRoot.Username = ADServerName + ADUserName; 
      searchRoot.Password = ADPassword; 
      DirectorySearcher searcher = new DirectorySearcher(searchRoot); 
      searcher.Filter = "(SAMAccountName=" + sUserName + ")"; 
      DirectoryEntry directoryEntry = searcher.FindOne().GetDirectoryEntry(); 
      directoryEntry.Invoke("ChangePassword", new object[] { sOldPassword, sNewPassword }); 
      directoryEntry.CommitChanges(); 
      directoryEntry.Close(); 
      message = string.Empty; 
     } 
     catch (Exception exception) 
     { 
      try 
      { 
       message = exception.InnerException.Message; 
      } 
      catch 
      { 
       message = exception.Message; 
      } 
     } 
     return message; 
    } 
} 
+0

pense que c'est un double - http://stackoverflow.com/questions/1329833/how-to-check-if-windows-user-account-name-exists-in-domain/1329872# 1329872 –

Répondre

0

Si c'est votre première expérience de notre ère, il pourrait être intéressant de jeter un oeil à cet article CodeProject: Howto: (Almost) Everything In Active Directory via C#. Il contient beaucoup d'exemples qui pourraient vous aider.

Que voulez-vous dire exactement par User_ID? Nom du compte? Nom distinctif LDAP?

+0

User_ID est un nom d'utilisateur –

1

Quelle version du .NET Framework êtes-vous?

Dans .NET 3.5 avant, vous pouvez probablement faire un DirectorySearch sur l'ensemble du serveur (ou encore un sous-arbre plus restreint):

public bool UserExists(string userName) 
{ 
    DirectoryEntry searchRoot = new DirectoryEntry("LDAP://dc=yourcompany,dc=com", userName, password); 
    DirectorySearcher searchForUser = new DirectorySearcher(searchRoot); 

    searchForUser.SearchScope = SearchScope.SubTree; 
    searchForUser.Filter = string.Format("(&(objectCategory=Person)(anr={0}))", userName); 

    if(searchForUser.FindOne() != null) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 

Ceci est juste à côté du haut de ma tête, ne peut pas tester tout de suite. Cela recherche dans votre domaine - vérifiez le chemin LDAP pour la SearchRoot - il devrait être quelque chose comme

LDAP://dc=yourcompany,dc=com 

ou si vous voulez rechercher juste à l'intérieur du conteneur « Utilisateurs »:

LDAP://cn=Users,dc=yourcompany,dc=com 

Avec .NET 3.5 choses beaucoup plus facile - voir ce MSDN Article pour beaucoup d'informations utiles sur la façon de rechercher et de trouver des utilisateurs et des groupes dans .NET 3.5 en utilisant le nouvel espace de noms System.DirectoryServices.AccountManagement. Vous pouvez tout simplement faire maintenant un appel FindByIdentity:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 

UserPrincipal foundUser = UserPrincipal.FindByIdentity(ctx, "your user name"); 

et c'est tout ce qu'il ya.

Marc

+0

utilisant le code ci-dessus: Erreur inconnue (0x80005000) Description: Une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. Détails de l'exception: System.Runtime.InteropServices.COMException: erreur inconnue (0x80005000) erreur Source: Ligne 88: Ligne 89: bool _return; Ligne 90: if (searchForUser.FindOne()! = Null) Ligne 91: { Ligne 92: _return = true; –

+0

Puis très probablement votre "ADServerName" n'est pas un nom LDAP valide - à quoi ça ressemble? Votre chemin LDAP de base doit être quelque chose comme 'LDAP: // dc = yourcompany, dc = com' ou quelque chose de similaire. –

+0

=> "LDAP: // adresse IP/DC = notreDomaine, DC = com" en utilisant le code ci-dessus, rendements => Échec d'ouverture de session: nom d'utilisateur inconnu ou mot de passe incorrect. –

Questions connexes