tutorial net mvc framework example español crear asp and asp.net-mvc http windows-authentication logout http-status-code-401

asp.net-mvc - net - login entity framework c# mvc



''Iniciar sesión como otro usuario'' MVC 4 Autenticación de Windows (2)

Tengo un proyecto de intranet escrito en MVC 4 que usa Autenticación de Windows para autorizar y autenticar usuarios.

Necesito agregar una funcionalidad ''Iniciar sesión como otro usuario''.

Después de buscar, encontré esta solución que sugiere devolver un 401, y creé la siguiente Acción (que se llama usando un formulario):

// // POST: /Home/LogOut [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOut() { return new HttpUnauthorizedResult(); }

Se llama a la Acción y el navegador muestra una ventana de nombre de usuario y contraseña, sin embargo, como el resultado redirige a la Acción, siempre se devuelve un 401.

¿Cómo redirecciono al usuario a la acción anterior, una vez que haya iniciado sesión con las nuevas credenciales?

¿Hay alguna manera de invalidar las credenciales en el servidor en lugar de simplemente devolver un 401?


La gente modificó la ingeniería inversa / decompiló un código de Sharepoint que tiene esta característica.

Lo probé en una ASP.NET MVC 5 y está funcionando como se esperaba.

El código se basa en la descompilación de Microsoft.TeamFoundation.WebAccess que tiene la función "Iniciar sesión como un usuario diferente".

public ActionResult LogOut() { HttpCookie cookie = Request.Cookies["TSWA-Last-User"]; if(User.Identity.IsAuthenticated == false || cookie == null || StringComparer.OrdinalIgnoreCase.Equals(User.Identity.Name, cookie.Value)) { string name = string.Empty; if(Request.IsAuthenticated) { name = User.Identity.Name; } cookie = new HttpCookie("TSWA-Last-User", name); Response.Cookies.Set(cookie); Response.AppendHeader("Connection", "close"); Response.StatusCode = 401; // Unauthorized; Response.Clear(); //should probably do a redirect here to the unauthorized/failed login page //if you know how to do this, please tap it on the comments below Response.Write("Unauthorized. Reload the page to try again..."); Response.End(); return RedirectToAction("Index"); } cookie = new HttpCookie("TSWA-Last-User", string.Empty) { Expires = DateTime.Now.AddYears(-5) }; Response.Cookies.Set(cookie); return RedirectToAction("Index"); }

Fuente:

Forzar inicie sesión como un usuario diferente mientras usa la Autenticación de Windows en asp.net


Este método siempre registrará al usuario y lo redireccionará a la página de inicio. También agregué [AllowAnonymous] para asegurarme de que todos puedan acceder a este método.

[AllowAnonymous] public ActionResult LogOut() { HttpCookie cookie = Request.Cookies["TSWA-Last-User"]; cookie = new HttpCookie("TSWA-Last-User", string.Empty) { Expires = DateTime.Now.AddYears(-5) }; Response.Cookies.Set(cookie); Response.AppendHeader("Connection", "close"); Response.StatusCode = 401; // Unauthorized; Response.Clear(); // redirect to home Response.Write("<script type=''text/javascript''>"); Response.Write("var getUrl = window.location; var baseUrl = getUrl.protocol + " + "''//'' + getUrl.host + ''/'' + getUrl.pathname.split(''/'')[1]; window.location.href = baseUrl; "); Response.Write("</script>"); Response.End(); return RedirectToAction("Index"); }