Domanda

Ho un'applicazione ASP.NET che gira su nostra intranet. Nella produzione posso ottenere l'utente dal contesto di dominio e avere accesso a un sacco di informazioni, tra cui il loro nome e cognome (UserPrincipal.GivenName e UserPrincipal.Surname).

Il nostro ambiente di test non fa parte del dominio di produzione e gli utenti di prova non hanno account di dominio in un ambiente di prova. Così, abbiamo aggiungerli come utenti di macchine locali. Sono richieste le credenziali quando navigano alla pagina iniziale. Io uso il seguente metodo per ottenere l'UserPrincipal

public static UserPrincipal GetCurrentUser()
        {
            UserPrincipal up = null;

            using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
            {
                up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
            }

            if (up == null)
            {
                using (PrincipalContext context = new PrincipalContext(ContextType.Machine))
                {
                    up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
                }
            }

            return up;
        }

Il problema che ho è che quando l'UserPrinicipal è retrived quando contextType == macchina non ottengo immobili come GivenName o cognome. C'è un modo per impostare questi valori quando si crea l'utente (Windows Server 2008) o devo andare su questo in un modo diverso?

È stato utile?

Soluzione

La funzione della domanda iniziale deve essere modificato. Se si tenta di accedere all'oggetto UserPrincipal che viene restituito, si otterrà un ObjectDisposedException

Inoltre, l'User.Identity.Name non è disponibile e deve essere passato in.

Ho fatto le seguenti modifiche alla funzione di cui sopra.

public static UserPrincipal GetUserPrincipal(String userName)
        {
            UserPrincipal up = null;

            PrincipalContext context = new PrincipalContext(ContextType.Domain);
            up = UserPrincipal.FindByIdentity(context, userName);

            if (up == null)
            {
                context = new PrincipalContext(ContextType.Machine);
                up = UserPrincipal.FindByIdentity(context, userName);
            }

            if(up == null)
                throw new Exception("Unable to get user from Domain or Machine context.");

            return up;
        }

Inoltre, la struttura di UserPrincipal ho bisogno di usare è DisplayName (invece di GivenName e Cognome);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top