2009-07-09 42 views
16

Tôi không phải là nhà phát triển .NET và tôi có cảm giác điều này sẽ không quan trọng đối với ai đó:Tải UPN hoặc email cho người dùng đã đăng nhập trong ứng dụng web .NET

Tôi có ứng dụng web C# làm cho người dùng thông tin đăng nhập của người dùng của người dùng đã đăng nhập. Hiện tại, nó sử dụng SID đến từ

System.Security.Principal.WindowsIdentity.GetCurrent().User.Value 

Tôi cần đăng nhập UPN hoặc địa chỉ email (như được định nghĩa trong thư mục hoạt động) thay vì SID. GetCurrent() trả về một đối tượng kiểu WindowsIdentity; nhìn vào các chi tiết cho WindowsIdentity Thành viên:

MSDN: WindowsIdentity Members

Tôi không thể nhìn thấy bất cứ điều gì mà có vẻ như nó sẽ đưa cho tôi một trong hai UPN hoặc email trong đó. Làm thế nào tôi có thể kéo lên thông tin đó để sử dụng, hoặc bằng cách cho SID vào một số chức năng khác hoặc gọi một cái gì đó khác nhau ở nơi đầu tiên.

Trả lời

35

Trong khi đó (.NET 3.5) đây là một một lớp lót:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress 

cho email hoặc

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName 

cho UPN.

+0

Điều này thật tuyệt vời! Tôi không biết về không gian tên AccountManagement - chính xác những gì tôi đang tìm kiếm. – davekaro

+0

Thường sẽ là rỗng. – djunod

+0

Đây là địa phương tốt nhưng không hoạt động trên IIS. –

1

Hãy thử:

System.Security.Principal.WindowsIdentity.GetCurrent().Name 
+1

Tài liệu nói "Nhận tên đăng nhập Windows của người dùng". - điều này sẽ trả về tên kiểu NT hoặc tên kiểu UPN? Tôi biết Microsoft đã nói nhiều năm trước rằng UPN woudl là cách mới để xác định người dùng, nhưng trong kinh nghiệm của tôi hầu như mọi thứ đều hoạt động khỏi thông tin đăng nhập NT Style - và người dùng có thể đăng nhập vào trang web này bằng logo UPN hoặc NT Style. trên nó bằng cách sử dụng cùng một hình thức người dùng đã làm. – DrStalker

+0

Chỉ cần thực hiện kiểm tra nhanh và System.Security.Principal.WindowsIdentity.GetCurrent(). Tên đang trả về DOMAIN \ username – DrStalker

+0

từ đó, bạn có thể đưa nó vào đối tượng DirectorySearcher để biết thêm chi tiết về người dùng cụ thể đó. Đối với DirectorySearcher, hãy xem http://www.dotnetactivedirectory.com/Understanding_LDAP_Active_Directory_User_Object_Properties.html, http://blog.lozanotek.com/articles/149.aspx và http://codebetter.com/blogs/peter.van.ooijen/ lưu trữ/2006/12/12/Nhận thông tin-out-of-active-directory_3A00_-DirectorySearcher_2C00_-Properties-và-DirectoryEntry.aspx. –

2

Để truy vấn hoạt động thư mục bằng cách sử dụng tìm kiếm thư mục mà bạn cần phải làm điều gì đó như thế này (mã hoàn toàn chưa được kiểm tra):

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
    string ldapPath = "LDAP://domain.company.com"; 

    public string GetEmail(string userName, string ldapPath) 
    { 
     using (DirectoryEntry root = new DirectoryEntry(ldapPath)) 
     { 
      DirectorySearcher searcher = new DirectorySearcher(root); 
      searcher.Filter = string.Format(@"(&(sAMAccountName={0}))", userName); 
      searcher.PropertiesToLoad = "mail"; 

      SearchResult result = searcher.FindOne(); 

      if (result != null) 
      { 
       PropertyValueCollection property = result.Properties["mail"]; 
       return (string)property.Value; 
      } 
      else 
      { 
       // something bad happened 
      } 
     } 
    } 
Các vấn đề liên quan