¿Cómo obtengo la cuenta de Windows actualmente iniciada en una página ASP.NET?

Tengo una aplicación ASP.NET 3.5 que utiliza autenticación de formularios ASP.NET. Quiero poder obtener el nombre de usuario de Windows conectado actualmente en la computadora (NO iniciada sesión en la aplicación ASP.NET, sino en Windows) cuando se editan datos en una página.

Si uso Context.User.Identity.Name.Tostring() , obtengo el nombre de usuario registrado en la aplicación ASP.NET, pero necesito el nombre de la cuenta de Windows.

 System.Security.Principal.WindowsIdentity.GetCurrent().Name.Tostring() 

Además, solo funciona cuando ejecuto el sitio web desde Visual Studio, pero después de implementarlo en IIS, devuelve NT AUTHORITY \ SYSTEM .

Debe configurar el modo de autenticación en Windows en su configuración y también desactivar los usuarios anónimos en la etiqueta de autorización.

Para que el usuario que ha iniciado sesión actualmente en una cuenta de Windows tenga que usar la Windows authentication lugar de la Forms authentication de Forms authentication :

System.Security.Principal.WindowsIdentity.GetCurrent (). Name.Tostring () también funciona solo cuando ejecuto el sitio web desde Visual Studio, pero después de implementarlo en IIS, devuelve NT AUTHORITY \ SYSTEM

Muestra la aplicación actual del usuario. Cuando alojas tu aplicación en el servidor web de Visual Studio, usa tu cuenta local. Sin embargo, cuando inicie sesión en la aplicación web con diferentes credenciales, siempre mostrará su inicio de sesión actual de Windows.

Una aplicación implementada en IIS usa la cuenta NT AUTHORITY \ SYSTEM en su caso.

Para hacer que el usuario que ha iniciado sesión actualmente en Windows en C #, use:

 string Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(); 

Luché y luché y luché con esto. Una de las cosas es que no tengo acceso a IIS, que está bloqueado, por lo que no pude cambiar ninguna de las configuraciones del servidor. Tuve que ir con lo que era capaz de hacer en código. Cuando lo investigué, muchas de las respuestas decían: “configura IIS así”. . Bueno, eso es genial cuando tienes acceso a IIS, pero no lo hice, tuve que trabajar con lo que podía hacer en el código. Entonces, terminé manejándolo así:

En mi archivo de configuración web, agregué las siguientes líneas de código dentro de la sección:

         

Entonces, devolvió un error en mi local, que tuve que entrar y arreglar. Fui al archivo applicationhost.config ubicado en la siguiente ruta en mi máquina (la suya podría ser diferente):

C: \ users \ “su nombre de usuario” \ My Documents \ “yourIISInstallation” \ config \ applicationhost.config

y cambié la siguiente configuración para “permitir”, que se había establecido en “negar”:

 

cambiado a

 

y

 

a

 

en el

  

sección. Antes de que descubriera esta solución, me estaba sacando el pelo. Espero que esto ayude a alguien. Tan pronto como puse el código anterior en el archivo webconfig, funcionó en la intranet, simplemente devolvió errores en mi local, pero tan pronto como agregué lo anterior a mi archivo localhost.config local, comencé a trabajar en mi local. también. Luego, llamé a la siguiente variable para devolver el nombre del usuario que inició sesión en Windows:

  HttpContext.Current.User.Identity.Name.ToString().Substring((HttpContext.Current.User.Identity.Name.ToString().IndexOf("\\")) + 1); 

¡Aclamaciones!

Yo uso esto:

 System.Security.Principal.WindowsPrincipal user; user = new WindowsPrincipal(this.Request.LogonUserIdentity); this.Request.LogonUserIdentity.Impersonate(); user_name = user_name.Substring(user_name.LastIndexOf("\\") + 1); 
 string strName = HttpContext.Current.User.Identity.Name.ToString(); 

Lo que quería hacer era correcto, pero primero debe configurar el servidor web, refiriéndose a Cómo obtener el nombre de usuario registrado de Windows NT usando ASP.NET (primeros pasos para configurar un servidor web).

Intente con la siguiente línea de código:

 string loggedOnUser = string.Empty; loggedOnUser = Request.ServerVariables.Get("AUTH_USER"); 

Es posible que no esté obteniendo los valores cuando ejecuta la aplicación desde Visual Studio … Verifíquelo después de implementarlo en IIS.

Para obtener el nombre de usuario, use:

 string userName = string.Empty; using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "Your Domain Name")) { UserPrincipal user = new UserPrincipal(pc); user = UserPrincipal.FindByIdentity(pc, "User ID Will Come here"); if (user != null) { userName = user.GivenName + " " + user.Surname; } else { //return string.Empty; userName = "User Not Found"; } } 

Logré resolver este problema siguiendo las instrucciones aquí en el Método 1 en el siguiente enlace: https://support.microsoft.com/en-us/help/896861/you-receive-error-401-1-when- En resumen, Deshabilite todos los métodos de autenticación, excepto la autenticación de Windows. Abra regedit en una cuenta de administrador, ubique HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0, haga clic con el botón derecho en el nodo y vaya a Nuevo, y seleccione Valor de cadena múltiple. Ingrese “BackConnectionHostNames” y haga clic en Entrar. Para Valor ingrese el sitio web en el que está intentando establecer el acceso y haga clic en Aceptar. Reiniciar IIS Una vez que lo hice, pude obtener el usuario actual de Windows usando HttpContext.Current.User.Identity.Name, WindowsPrincipal (this.Request.LogonUserIdentity) también me dieron el nombre de usuario de Windows registrado. .UserName y System.Security.Principal.WindowsIdentity.GetCurrent (). Name, ambos de estos aún se asignaron al usuario de IIS.

Esto me ha llevado siglos para llegar al fondo de. Suerte con ello. ¡IIS es una pesadilla para despertar!