Frage an c#, active-directory, .net – UPN oder E-Mail für angemeldete Benutzer in einer .NET-Webanwendung abrufen

18

Ich bin kein .NET-Entwickler und habe das Gefühl, dass dies für jemanden, der:

Ich habe eine C # -Webanwendung, mit der Benutzer die Anmeldeinformationen des angemeldeten Benutzers abrufen können. Derzeit wird die SID verwendet, von der sie stammt

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

Ich muss entweder den UPN-Benutzernamen oder die E-Mail-Adresse (wie im Active Directory definiert) anstelle der SID erhalten. GetCurrent () gibt ein Objekt vom Typ WindowsIdentity zurück. In den Details nach WindowsIdentity-Mitgliedern suchen:

MSDN: WindowsIdentity-Mitglieder

Ich kann nichts sehen, das so aussieht, als würde es mir entweder das UPN oder die E-Mail geben. Wie kann ich diese Informationen abrufen, um sie zu verwenden, indem ich die SID in eine andere Funktion eingebe oder etwas anderes aufrufe?

Deine Antwort

3   die antwort
38

Inzwischen (.NET 3.5) ist dies ein Einzeiler:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress

für die E-Mail oder

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

für das UPN.

Dies ist lokal gut, funktioniert jedoch nicht mit IIS. nPcomp
Das ist fantastisch! Ich wusste nichts über den AccountManagement-Namespace - genau das, wonach ich gesucht habe. davekaro
Wird normalerweise null sein. djunod
Dies funktioniert nicht domänenübergreifend Sebazzz
1

Versuchen:

System.Security.Principal.WindowsIdentity.GetCurrent().Name
Wir haben gerade einen kurzen Test durchgeführt und System.Security.Principal.WindowsIdentity.GetCurrent (). Name gibt DOMAIN \ Benutzername zurück DrStalker
Danach können Sie es in das DirectorySearcher-Objekt einfügen, um weitere Details zu diesem bestimmten Benutzer abzurufen. Für DirectorySearcher siehedotnetactivedirectory.com/…, blog.lozanotek.com/articles/149.aspx undcodebetter.com/blogs/peter.van.ooijen/archive/2006/12/12/…. Jimmy Chandra
In der Dokumentation heißt es: "Ruft den Windows-Anmeldenamen des Benutzers ab." - Gibt dies den Namen des NT-Stils oder des UPN-Stils zurück? Ich weiß, dass Microsoft vor vielen Jahren gesagt hat, UPN sei die neue Möglichkeit, Benutzer zu identifizieren, aber meiner Erfahrung nach funktioniert fast alles mit NT Style-Anmeldeinformationen - und Benutzer können sich mit UPN- oder NT Style-Logos auf dieser Site anmelden, sodass ich mich nicht darauf verlassen kann Verwenden Sie dazu dasselbe Formular, das der Benutzer verwendet hat. DrStalker
2

Um Active Directory mit einem Verzeichnissucher abzufragen, müssen Sie Folgendes tun (völlig ungetesteter Code):

    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 Fragen