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.
Utilice el atributo [Autorizar] en las clases que necesitan autorización:
[Authorize]
public class MeController : ApiController
{
// GET api/<controller>
public IEnumerable<object> Get()
{
var identity = User.Identity as ClaimsIdentity;
return identity.Claims.Select(c => new
{
Type = c.Type,
Value = c.Value
});
}
}
fuente: http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server