c# - obtener - ¿Cómo sabe HttpContext.Current.User.Identity.Name qué nombres de usuario existen?
obtener usuario de red c# (6)
¿Cómo [HttpContext.Current.User] sabe qué nombres de usuario existen o no existen?
Veamos un ejemplo de una manera en que esto funciona. Supongamos que está utilizando la autenticación de formularios y se desencadena el evento "OnAuthenticate". Este evento ocurre " cuando la aplicación autentica la solicitud actual " ( Fuente de referencia ).
Hasta este punto, la aplicación no tiene idea de quién eres.
Dado que está utilizando la autenticación de formularios, primero verifica el análisis de la cookie de autenticación (generalmente .ASPAUTH ) mediante una llamada a ExtractTicketFromCookie
. Esto llama a FormsAuthentication.Decrypt
(este método es público; ¡puede llamar a esto usted mismo!). Luego, llama a Context.SetPrincipalNoDemand
, convierte la cookie en un usuario y la rellena en Context.User
( Fuente de referencia ).
Esto no es necesariamente un problema, solo tengo curiosidad por saber cómo funciona. Tengo un método:
public static bool UserIsAuthenticated()
{
bool isAuthed = false;
try
{
if (HttpContext.Current.User.Identity.Name != null)
{
if (HttpContext.Current.User.Identity.Name.Length != 0)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
isAuthed = true;
string MyUserData = ticket.UserData;
}
}
}
catch { } // not authed
return isAuthed;
}
El HttpContext.Current.User.Identity.Name
devuelve null
si el usuario no existe, pero ¿cómo sabe qué nombres de usuario existen o no existen?
El HttpContext.Current.User.Identity.Name devuelve nulo
Esto depende de si el modo de autenticación está configurado en Formularios o Windows en su archivo web.config.
Por ejemplo, si escribo la autenticación de esta manera:
<authentication mode="Forms"/>
Luego, debido a que el modo de autenticación = "Formularios", obtendré nulo para el nombre de usuario. Pero si cambio el modo de autenticación a Windows de esta manera:
<authentication mode="Windows"/>
Puedo ejecutar la aplicación nuevamente y verificar el nombre de usuario, y obtendré el nombre de usuario correctamente.
Para obtener más información, consulte System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName en ASP.NET .
Para la autentificación de windows
selecciona tu proyecto
Presiona F4
Deshabilite "Autenticación anónima" y habilite "Autenticación de Windows"
Solo para agregar, si está utilizando ASP.Net Core 2, asegúrese de tener la configuración correcta en el archivo " launchSettings.json " (en la carpeta Propiedades).
De forma ridícula, estas configuraciones parecen anular las configuraciones reales que ha definido en IIS, por lo que si " windowsAuthentication
" se establece en false
aquí, User.Identity.Name
devolverá el valor nulo.
Suponga un entorno de red donde un "usuario" (también conocido como usted) tiene que iniciar sesión. Por lo general, este es un ID de usuario (UID) y una contraseña (PW). OK entonces, ¿cuál es tu identidad, o quién eres? Usted es el UID, y esto recoge ese "nombre" de su sesión de inicio de sesión. ¡Sencillo! También debería funcionar en una aplicación de Internet que necesita que inicies sesión, como Best Buy y otros.
Esto quitará mi UID, o "Nombre", de mi sesión cuando abra la página predeterminada de la aplicación web que necesito usar. Ahora, en mi caso, soy parte de un dominio, por lo que puedo usar la autenticación inicial de Windows, y necesita verificar quién soy, por lo tanto, la segunda parte del código. En cuanto a la autenticación de formularios, dependería del ticket (lo más probable es que una cookie) se envíe a su estación de trabajo / computadora. Y el código se vería así:
string id = HttpContext.Current.User.Identity.Name;
// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"/", StringComparison.InvariantCulture) + 1);
Ahora tiene mi nombre comercial (también conocido como UID) y puede mostrarlo en la pantalla.
También compruebe que
<modules>
<remove name="FormsAuthentication"/>
</modules>
Si has encontrado algo como esto, simplemente elimina:
<remove name="FormsAuthentication"/>
Línea desde web.config y aquí está, funcionará bien, lo he probado.