8

Tôi đang cố gắng tạo một trang web mạng nội bộ trên ASP.NET MVC 4 bằng cách sử dụng Đăng nhập Windows. Tôi đã thực hiện thành công đăng nhập cửa sổ. Điều duy nhất tôi đang mắc kẹt là tìm kiếm thư mục hoạt động với một phần tên người dùng. Tôi đã thử tìm kiếm trên web và trang web stackoverflow nhưng vẫn không thể tìm thấy câu trả lời.ASP.NET Active Directory Search

DirectoryEntry directory = new DirectoryEntry("LDAP://DC=NUAXIS"); 
    string filter = "(&(cn=jinal*))"; 
    string[] strCats = { "cn" }; 
    List<string> items = new List<string>(); 
    DirectorySearcher dirComp = new DirectorySearcher(directory, filter, strCats,  SearchScope.Subtree); 
    SearchResultCollection results = dirComp.FindAll(); 
+0

Can bạn chúng tôi mã bạn đã sử dụng để thực hiện tìm kiếm trên một phần tên người dùng? – rene

+0

@rene Tôi đã thêm mã vào bài đăng –

Trả lời

13

Bạn có thể sử dụng một PrincipalSearcher và một "truy vấn theo ví dụ" chủ yếu để làm tìm kiếm của bạn:

// create your domain context 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    // define a "query-by-example" principal - here, we search for a UserPrincipal 
    // and with the first name (GivenName) of "Jinal*" 
    UserPrincipal qbeUser = new UserPrincipal(ctx); 
    qbeUser.GivenName = "Jinal*"; 

    // create your principal searcher passing in the QBE principal  
    using (PrincipalSearcher srch = new PrincipalSearcher(qbeUser)) 
    { 
     // find all matches 
     foreach(var found in srch.FindAll()) 
     { 
     // do whatever here - "found" is of type "Principal" - 
     // it could be user, group, computer.....   
     } 
    } 
} 

Nếu bạn chưa sẵn sàng - hoàn toàn đọc bài viết MSDN Managing Directory Security Principals in the .NET Framework 3.5 trong đó cho thấy độc đáo cách tận dụng tối đa các tính năng mới trong System.DirectoryServices.AccountManagement. Hoặc xem không gian tên MSDN documentation on the System.DirectoryServices.AccountManagement.

Tất nhiên, tùy thuộc vào nhu cầu của bạn, bạn có thể muốn xác định các tài sản khác trên rằng "truy vấn theo ví dụ" người dùng chính bạn tạo ra:

  • DisplayName (thường: Tên đầu tiên + không gian + tên cuối cùng)
  • SAM Account Name -/AD tên tài khoản Windows
  • User Principal Name - "[email protected]" tên phong cách của bạn

bạn có thể SPE quy định bất kỳ thuộc tính nào trên số UserPrincipal và sử dụng các thuộc tính đó làm "truy vấn theo ví dụ" cho PrincipalSearcher của bạn.

+0

Cảm ơn đã giúp rất nhiều. –

0

Mã hiện tại của bạn đang đi đúng hướng. Tôi nghĩ rằng bạn có ký tự đại diện của bạn ngược.

Hãy xem xét điều này:

search.Filter = string.Format("(&(sn={0}*)(givenName={1}*)(objectSid=*))", lastName, firstName); 
Các vấn đề liên quan