tutorial net mvc framework existing empty asp adding c# asp.net-mvc-5 owin

c# - net - ¿Cómo cerrar la sesión de los proveedores de Owin?



owin asp net mvc 5 (3)

Estoy siguiendo este tutorial pero no te dice cómo cerrar la sesión. Traté de hacer

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie); Request.GetOwinContext().Authentication.SignOut() Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

Puede obtener el código de ejemplo aquí: https://github.com/AndersAbel/SocialLoginWithoutIdentity

Solo hay que añadir una acción más.

public ActionResult SignOut() { Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie); return RedirectToAction("Index", "Home"); }

Este método más cualquiera de las 3 líneas de lo publicado arriba

Mi resultado en este momento es, inicio sesión, voy a la página segura y puedo verla, luego procedo a mi cierre de sesión y luego, después de cerrar sesión, intento volver a la página segura y se me permite volver a esa página segura.

Así que en realidad no me dio de baja.


Como se mencionó en el tutorial, el middleWare utilizado usa el tipo de autenticación predeterminado pero no lo invalida.

Al usar solo externalCookie como parámetro para Owin, está borrando la cookie de Asp, pero no la utilizada para almacenar el proveedor de Google .

para ello, deberá obtener la matriz de todas las cookies actuales. Se puede hacer de la manera más fácil así:

Request.GetOwinContext() .Authentication .SignOut(HttpContext.GetOwinContext() .Authentication.GetAuthenticationTypes() .Select(o => o.AuthenticationType).ToArray());

Aquí es donde se dice en el Tutorial :

La llamada a UseGoogleAuthentication debe ser bastante obvia por qué es necesaria.

Pero el primero enSetDefaultSignInAsAuthenticationType no es tan obvio. El middleware de inicio de sesión normalmente se basa en el middleware de cookie externo registrado antes del middleware de inicio de sesión social. middleware de cookie externa, se establece como el tipo de inicio de sesión predeterminado. Así es como el middleware de inicio de sesión social sabe que debe usar la cookie externa. En esta configuración no hay una cookie externa, por lo que debemos configurar manualmente el middleware de la cookie principal como el tipo de inicio de sesión predeterminado. El middleware de la cookie solo emitirá una cookie si el AuthenticationType coincide con el de la identidad creada por el middleware de inicio de sesión social. En la configuración de la


Intente configurar los encabezados de control de caché.

public ActionResult SignOut() { var authenticationTypes = new string[] { DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie }; AuthenticationManager.SignOut(authenticationTypes); // HACK: Prevent user from being able to go back to a logged in page once logged out Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); // now redirect return RedirectToAction("Index", "Home"); } private IAuthenticationManager AuthenticationManager { get { return Request.GetOwinContext().Authentication; } }

No hay nada que impida al usuario hacer clic en el botón Atrás en el navegador, a menos que intente con JavaScript, que se puede desactivar. El usuario puede volver a una página y ver lo que había en la página anterior, pero si intentan hacer clic en los enlaces protegidos o actualizar la página, se los redireccionará para iniciar sesión.