2011-02-10 25 views
12

Używam uwierzytelniania systemu Windows w mojej aplikacji asp.net MVC 3. Czy jest jakiś sposób, aby uzyskać informacje o użytkownikach z aktywnego katalogu?Uzyskiwanie informacji o Active Directory podczas korzystania z uwierzytelniania systemu Windows?

Wiem, że mogę użytkownika User.Name.Identity i to działa dla nazwy logowania. Ale co z otrzymywaniem nazwy użytkownika, nazwiska, a nawet opisu lub pakietu Office z aktywnego katalogu. Czy to możliwe przez .net?

Odpowiedz

22

Oczywiście !! Jeśli korzystasz z .NET 3.5 lub nowszego, w rzeczywistości jest to całkiem łatwe.

Zasadniczo należy użyć przestrzeni nazw System.DirectoryServices.AccoutManagement (przeczytaj wszystko tutaj: Managing Directory Security Principals in the .NET Framework 3.5).

Następnie: trzeba „znaleźć” użytkownika i chwycić jego właściwości - kod używać coś takiego:

// create domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find the user 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "username"); 

if(user != null) 
{ 
    // access the user's properties in a nice, object-oriented way 
} 
+1

Dziękuję, dziękuję! – twal

+0

@twal nie zapomnij przyjąć tej odpowiedzi, jeśli zadziałało. –

+0

@marc_s co mnie ciekawi to, w jaki sposób powinienem przechować te informacje o użytkowniku, aby zapobiec zbyt wielu naciśnięciom w AD. Kolekcja Cookie lub Session []? Albo coś innego? Wszystko, co chcę zrobić, to zapisać nazwę wyświetlaną duder na później, bez konieczności dotykania AD za każdym razem, gdy żądanie przychodzi do IIS. Co myślisz? –

5

Jeśli kod zostanie uruchomiony w kontekście użytkownika, który można znaleźć informacje na to jest jeszcze lżejszy (czyli Windows Authentication):

//Must reference System.DirectoryServices.AccountManagement 
var user = UserPrincipal.Current; 

var firstName = user.GivenName; 
var lastName = user.Surname; 
0

w moim środowisku musiałem dodać do sekcji w pliku web.config:

<identity impersonate="true" /> 
Powiązane problemy