Pregunta

Tengo una aplicación ASP.NET que se ejecuta en nuestra intranet. En la producción que puedo conseguir que el usuario del contexto de dominio y tener acceso a una gran cantidad de información, incluyendo su nombre y apellido (UserPrincipal.GivenName y UserPrincipal.Surname).

Nuestro entorno de prueba no es parte del dominio de producción y los usuarios de prueba no tienen cuentas de dominio en el entorno de prueba. Por lo tanto, los añadimos ya que los usuarios de la máquina local. Se le solicita credenciales cuando navegan a la página de inicio. Yo uso el método siguiente para obtener la 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;
        }

El problema que tengo es que cuando el UserPrinicipal se retrived cuando ContextType == máquina no consigo propiedades como GivenName o Apellido. ¿Hay una manera de establecer estos valores al crear el usuario (Windows Server 2008) o tengo que ir sobre esto de una manera diferente?

¿Fue útil?

Solución

La función en la pregunta original tiene que ser modificado. Si intenta acceder al objeto UserPrincipal que se devuelve, obtendrá una ObjectDisposedException

Además, el User.Identity.Name no está disponible y debe ser aprobada en.

he hecho los siguientes cambios en la función anterior.

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;
        }

Además, la propiedad de UserPrincipal necesito utilizar es DisplayName (en lugar de GivenName y Apellido);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top