Ottenere UPN o e-mail per utente connesso in un .NET applicazioni web

Io non sono un .NET developer, e ho la sensazione che questo sarebbe banale per qualcuno che è:

Ho un C# applicazione web che consente di immettere le credenziali dell’utente dell’utente registrato. Attualmente si utilizza il SID che viene da

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

Ho bisogno di ottenere entrambi gli utenti del NOME di login o indirizzo e-mail (come definito in active directory) invece del SID. GetCurrent() restituisce un oggetto di tipo WindowsIdentity; guardando i dettagli per WindowsIdentity Membri:

MSDN: WindowsIdentity Membri

Io non riesco a vedere niente di quello che sembra che mi avrebbe dato il NOME o e-mail in là. Come faccio a tirare su le informazioni per l’uso, sia per l’alimentazione di SID in qualche altra funzione o chiamando qualcosa di diverso, in primo luogo.

InformationsquelleAutor DrStalker | 2009-07-09

 

3 Replies
  1. 39

    Nel frattempo (.NET 3.5) questo è un one-liner:

    System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress

    per email, o

    System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

    per l’UPN.

    • Ciò è impressionante! Non sapevo lo spazio dei nomi AccountManagement – esattamente quello che stavo cercando.
    • Di solito sarà null.
    • Questo è un buon locale, ma non funziona su IIS.
    • Questo non funziona cross-domain
  2. 2

    Di query di active directory utilizzando una directory searcher è bisogno di fare qualcosa di simile a questo (totalmente il codice non testato):

        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
                }
            }
        }
  3. 1

    Provare:

    System.Security.Principal.WindowsIdentity.GetCurrent().Name
    • La documentazione dice “Ottiene l’utente il nome di accesso a Windows.” – sarà questo ritorno lo stile NT nome o il NOME nome di stile? So di Microsoft ha detto che molti anni fa, che la UPN sarebbe il nuovo modo di identificare gli utenti, ma nella mia esperienza di quasi tutto funziona off NT credenziali di Stile – e gli utenti possono accedere a questo sito con UPN o NT Stile logoins quindi non posso fare affidamento su di essa, utilizzando lo stesso modulo che l’utente ha.
    • Appena fatto una prova veloce e di Sistema.Di sicurezza.Principale.WindowsIdentity.GetCurrent().Il nome è il ritorno di DOMINIO\nomeutente
    • da questo, si può alimentare in oggetto DirectorySearcher per ottenere maggiori informazioni su un particolare utente. Per DirectorySearcher, vedere dotnetactivedirectory.com/…, blog.lozanotek.com/articles/149.aspx e codebetter.com/blogs/peter.van.ooijen/archive/2006/12/12/….

Lascia un commento