2009-07-09 1 views
16

ich keine .NET-Entwickler bin, und ich habe das Gefühl, das für jemanden trivial sein würde, ist:Get UPN oder E-Mail in Benutzer in einer .NET Web-Anwendung protokolliert

ich eine C# Web-Anwendung habe das macht Benutzer der Benutzeranmeldeinformationen des angemeldeten Benutzers. Derzeit verwendet er die SID, die von

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

I (gemäß der Definition in Active Directory) anstelle der SID brauchen, um entweder den Benutzer UPN Login oder E-Mail-Adresse kommt. GetCurrent() gibt ein Objekt vom Typ WindowsIdentity zurück; in den Details der Suche nach Windows Mitglieder:

MSDN: WindowsIdentity Members

ich nichts sehen kann, der wie es mir dort entweder die UPN oder E-Mail würde aussieht. Wie kann ich diese Informationen abrufen, indem ich die SID in eine andere Funktion einspeise oder an anderer Stelle etwas anderes aufruft?

Antwort

35

Inzwischen (.NET 3.5) wird dieses a Einzeiler:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress 

für die E-Mail oder

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName 

für den UPN.

+0

Das ist großartig! Ich wusste nichts über den Namespace AccountManagement - genau das, wonach ich suchte. – davekaro

+0

Wird normalerweise null sein. – djunod

+0

Das ist lokal gut, funktioniert aber nicht auf IIS. –

1

Versuchen:

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

Die Dokumentation lautet "Ruft den Windows-Anmeldenamen des Benutzers ab." - Gibt dies den NT-Namen oder den UPN-Namen zurück? Ich weiß, dass Microsoft vor vielen Jahren gesagt hat, dass UPN der neue Weg zur Identifizierung von Benutzern sein wird, aber meiner Erfahrung nach funktioniert fast alles mit NT-Anmeldeinformationen - und Benutzer können sich auf dieser Seite mit UPN- oder NT-Style-Logos anmelden, auf die ich mich nicht verlassen kann mit demselben Formular, das der Benutzer gemacht hat. – DrStalker

+0

Nur ein kurzer Test und System.Security.Principal.WindowsIdentity.GetCurrent(). Name gibt DOMÄNE \ Benutzername – DrStalker

+0

von diesem zurück, Sie können es in DirectorySearcher Objekt Feed um weitere Details zu diesem bestimmten Benutzer zu erhalten. Weitere Informationen zu DirectorySearcher finden Sie unter http://www.dotnetactivedirectory.com/Understanding_LDAP_Active_Directory_User_Object_Properties.html, http://blog.lozanotek.com/articles/149.aspx und http://codebetter.com/blogs/peter.van.ooijen/ archive/2006/12/12/Abrufen von Informationen aus dem aktiven Verzeichnis_3A00_-DirectorySearcher_2C00_-Properties-and-DirectoryEntry.aspx. –

2

Active Directory abzufragen ein Verzeichnis Sucher verwenden, müssen Sie so etwas wie dieses (total ungetesteten Code) tun:

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 
      } 
     } 
    } 
Verwandte Themen