2009-08-12 15 views
5

Tôi đang sử dụng Active Directory trong lớp MembershipProvider tùy chỉnh để xác thực người dùng trong ứng dụng mạng nội bộ ASP.NET 2.0 và liên kết sid của họ với một cấu hình cho ứng dụng.ASP.NET - Nhận mã định danh chính/tương đối (RID) cho một DirectoryEntry/SID

Khi ActiveDirectoryMembershipProvider được sử dụng, đối tượng ProviderUserKey cho MembershipUser như sau

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey; 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */ 

Theo tôi được biết, YY là hiệu trưởng trong không gian tên (cũng được gọi là một nhóm/tên miền).

Khi sử dụng MembershipProvider tùy chỉnh, tôi có thể nhận được bằng cách sử dụng sid objectSid tài sản của một đối tượng DirectoryEntry

DirectoryEntry entry = new DirectoryEntry(path, username, password); 
SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0); 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX" */ 

Các sidValue trong trường hợp này là giống hệt nhau, ngoại trừ nó không chứa hiệu trưởng YY.

Câu hỏi của tôi là hai lần

  1. Sản phẩm chủ yếu cần thiết để nhận diện một cá nhân?
  2. Có thể lấy hiệu trưởng từ đối tượng DirectoryEntry (hoặc thông qua bất kỳ lớp nào khác có sẵn trong System.DirectoryServices)?

EDIT:

Sau khi thực hiện một số đọc thêm ({1}{2}), bây giờ tôi biết rằng sid có thể thay đổi nếu người dùng đang di chuyển từ một nhóm/miền khác. Trong điều kiện này, việc sử dụng số GUID được xác định trong DirectoryEntryProperties["objectGUID"] có phải là lựa chọn tốt hơn để nhận dạng duy nhất người dùng không?

Trả lời

3

ObjectGUID là lựa chọn tốt nhất để xác định người dùng tài khoản. Tôi làm nổi bật điều này bởi vì objectGUID là duy nhất và cố định cho một cá thể của một tài khoản. Nếu bạn xóa và tạo lại tài khoản với cùng một tên phân biệt, bạn sẽ nhận được một đối tượng khác nhau. Vì vậy, objectGUID không xác định người dùng, nó xác định tài khoản.

Vì vậy, nếu bạn muốn xác định tài khoản, hãy sử dụng objectGUID.

Đôi khi, tài khoản có thể bị xóa và tạo lại bởi quản trị viên để giải quyết sự cố. Nếu bạn cần phải xác định người dùng ngay cả sau khi điều này đã xảy ra, bạn cần phải chọn một cái gì đó khác trên đối tượng tài khoản. Điều đó có thể sẽ phải phụ thuộc vào chính sách định nghĩa tài khoản của bạn. Có lẽ bạn có sAMAccountNames không dựa trên tên của người dùng? Có lẽ các quản trị viên cư trú employeeid hoặc employeeNumber? Có lẽ chúng thực thi tính duy nhất cho displayNames?

Đây là liên kết đến AD attribute info. Đây là liên kết đến DirectoryEntry Properties.

+0

Đối tượngGUID có phải là GUID cho tài khoản hoặc GUID cho loại đối tượng mà mục nhập thư mục đại diện không? Ngoài ra, bạn có một liên kết đến bất kỳ tài liệu nào cung cấp chi tiết về từng thuộc tính mục nhập thư mục không? –

+0

Đó là GUID cho tài khoản cá nhân. Bạn có thể thấy nó trong Active Directory nếu bạn sử dụng ADSI Edit MMC Snap-in (http://technet.microsoft.com/en-us/library/cc773354 (WS.10).aspx). – serialhobbyist

+0

Tôi đã thêm liên kết vào bài đăng chính vì bài đăng trước dường như bị xáo trộn một chút. Tôi đã không chắc chắn cho dù bạn muốn các thuộc tính của đối tượng DirectoryEntry hoặc đối tượng AD. Trong trường hợp sau, người AD có xu hướng nói về chúng như là các thuộc tính. Vì vậy, một thể hiện của một lớp AD, chẳng hạn như người dùng, có các thuộc tính như displayName. Một thể hiện của DirectoryEntry có thuộc tính Properties chứa một tập hợp các thuộc tính và các giá trị của chúng. Nó sẽ được gọi là Thuộc tính, IMO. – serialhobbyist

Các vấn đề liên quan