2012-02-27 1 views
0

Я написал код для Active Directory Проверка подлинности LDAP, аутентифицирует всю учетную запись пользователя в AD, но я хочу, чтобы только учетная запись администратора не была учетной записи другого пользователя (см. Ниже код). имя подключения DNS (см прикрепленное изображение)LDAP Аутентификация только для учетной записи администратора

 try 
     { 
      DirectoryEntry entry = new DirectoryEntry(Domain, UserName, Password); 
      object nativeObject = entry.NativeObject; 
      Program.fileWrite.WriteLine(DateTime.Now + "\t Login with credentials " + UserName + " and " + Password); 
      return true; 
     } 
     catch (DirectoryServicesCOMException e) 
     { 
      Program.fileWrite.WriteLine(DateTime.Now + "\t " + e.Message); 
      return false; 
     } 

login page

ответ

2

Попробуйте этот код:.

public static bool ValidateCredential(string domain, string userName, string password) 
    { 
     using (var context = new PrincipalContext(ContextType.Domain, domain)) 
     { 
      using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName)) 
      { 
       if (user == null) return false; 

       using (var group = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Admins")) 
       { 
        if (group == null) return false; 

        foreach (var member in group.GetMembers()) 
        { 
         if (member.Sid.Equals(user.Sid)) 
         { 
          return context.ValidateCredentials(userName, password); 
         } 
        } 
       } 
      } 
     } 

     return false; 
    } 
+0

Благодаря .it работает очень круто – soundy