2012-08-14 4 views
0

Structure du répertoire est comme,Authentifier l'utilisateur dans ldap

ou=system,ou=valeteck,cn=mayank 

Je dois vérifier que le mot de passe entré par l'utilisateur est correcte et correspondance avec i.e. mot de passe de l'utilisateur de mayank.

Mais le système et cn='mayank' ont des mots de passe différents. Si je crée un objet d'entrée de répertoire avec le mot de passe cn je n'ai pas obtenu d'authentification avec ldap mais si j'utilise le répertoire système et son mot de passe je m'authentifie mais ensuite comment vérifier le mot de passe de l'utilisateur.

+0

duplication possible de [Comment authentifier LDAP dans .NET] (http://stackoverflow.com/questions/769268/how-to-authenticate-ldap-in-net) – Shai

+0

Est-ce que [ma réponse ici aide du tout? ] (http://stackoverflow.com/questions/290548/c-sharp-validate-a-username-and-password-against-active-directory/499716#499716) - ceci est spécifiquement pour Active Directory –

Répondre

0
private bool LoginS(string userName, string password) 
     { 
      bool authentic = false; 
      try 
      { 
       DirectoryEntry entry = new DirectoryEntry(LDAP-Path, userName, password, AuthenticationTypes.Secure); 
       authentic = true; 


       Console.WriteLine("Authentication successful"); 

      } 
      catch (DirectoryServicesCOMException e) 
      { 
       _logger.Error("Authentification error", e); 
       //User doesnt exist or input is false 

      } 
      return authentic; 
     } 
0

Il existe même une méthode plus simple qui vous est fournie par l'API Windows utilisant advapi32.dll.

Exemple:

[DllImport("advapi32.dll", EntryPoint = "LogonUserW", SetLastError = true, CharSet = CharSet.Auto)] 
    public static extern bool LogOnUser(string lpszUserName, string lpszDomain, string lpszPassword, 
     int dwLogOnType, int dwLogOnProvider, ref IntPtr phToken); 

cette méthode retourne simplement true ou false si l'utilisateur est en effet dans le domaine et est entré correctement son mot de passe. Ensuite, vous venez de faire votre propre connexion dans l'authentification de vérification de méthode contre advapi32.dll.

public ActionResult SignIn(SignInModel model) 
    { 
     string domainName = CheckSignIn.GetDomainName(model.User.UserName); 
     string userName = CheckSignIn.GetUserName(model.User.UserName); 
     IntPtr token = IntPtr.Zero; 
     bool result = CheckSignIn.LogOnUser(userName, domainName, model.User.UniqueUserCode, 2, 0, ref token); 
     if (result) 
     { 
      if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && Request.QueryString["ReturnUrl"] != "/") 
      { 
       FormsAuthentication.RedirectFromLoginPage(model.User.UserName, false); 
      } 
      else 
      { 
       FormsAuthentication.SetAuthCookie(model.User.UserName, false); 
       return RedirectToAction("MyVoyages", "Voyage"); 
      } 
     } 
     return SignIn(true); 
    } 

simple, mais puissant.

Questions connexes