2010-10-21 27 views
10

Tôi đang sử dụng cửa sổ Xác thực và truy cập tên người dùng là.Cách lấy chi tiết người dùng trong Xác thực Windows asp.net

IIdentity winId = HttpContext.Current.User.Identity; 
string name = winId.Name; 

nhưng tôi muốn nhận các chi tiết khác như User name và EmailID.

+0

Bạn đang sử dụng nhà cung cấp memebership trong ứng dụng của bạn? – Restuta

+0

không, ứng dụng của tôi. là trên mạng nội bộ để sử dụng xác thực cửa sổ. –

Trả lời

14

Vì bạn đang ở trên một mạng lưới cửa sổ, sau đó bạn cần phải truy vấn Active directory để tìm kiếm cho người dùng và sau đó nhận được thuộc tính của nó chẳng hạn như email

Dưới đây là một ví dụ chức năng DisplayUser rằng đưa ra một IIdentity trên một cửa sổ xác nhận mạng, tìm email của người dùng:

public static void Main() { 
    DisplayUser(WindowsIdentity.GetCurrent()); 
    Console.ReadKey();  
} 

public static void DisplayUser(IIdentity id) {  
    WindowsIdentity winId = id as WindowsIdentity; 
    if (id == null) { 
     Console.WriteLine("Identity is not a windows identity"); 
     return; 
    } 

    string userInQuestion = winId.Name.Split('\\')[1]; 
    string myDomain = winId.Name.Split('\\')[0]; // this is the domain that the user is in 
    // the account that this program runs in should be authenticated in there      
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + myDomain); 
    DirectorySearcher adSearcher = new DirectorySearcher(entry); 

    adSearcher.SearchScope = SearchScope.Subtree; 
    adSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userInQuestion + "))"; 
    SearchResult userObject = adSearcher.FindOne(); 
    if (userObject != null) { 
     string[] props = new string[] { "title", "mail" }; 
     foreach (string prop in props) { 
      Console.WriteLine("{0} : {1}", prop, userObject.Properties[prop][0]); 
     } 
    } 
} 

cho này: alt text

Edit: Nếu bạn nhận được 'người dùng xấu/lỗi mật khẩu' Tài khoản rằng mã chạy dưới phải có quyền truy cập cho người dùng miền. Nếu bạn chạy mã trong asp.net thì ứng dụng web phải được chạy dưới một hồ bơi ứng dụng với thông tin đăng nhập với quyền truy cập miền. Xem here để biết thêm thông tin

+1

Jeevan. Ví dụ này có phù hợp với bạn không? –

+0

cảm ơn, nhưng ... Tôi đang sử dụng xác thực cửa sổ vì vậy mục đích của tôi là: có một usl "http: //ipAddress/myApp/home.aspx" ngay bây giờ khi sử dụng mở nó trên mạng nội bộ sau đó trên màn hình, chúng ta sẽ thấy thông tin đăng nhập của Ngài tên, Họ tên và email. Anh ta sẽ không làm bất cứ điều gì khác. Bây giờ đến với mã ur ... làm thế nào chúng ta sẽ thiết lập "myPassword". –

+0

đã chỉnh sửa câu trả lời để làm cho câu trả lời đơn giản hơn. Bây giờ có ổn không? –

-2

Cast nó để Identity cụ thể, ví dụ WindowsIdentity

+0

tôi nghĩ bạn không đọc được câu hỏi của tôi. Tôi cần tên đầy đủ và emailid. Chúng tôi không thể có được những chi tiết này bằng WindowsIdentity. –

-1

Bạn có thể định nghĩa một MyCustomIdentity bằng cách ghi đè từ IIdentity và thêm các thuộc tính riêng của bạn, vv

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