authentication - studio - owin login c#
OWIN-Authentication.SignOut() no parece eliminar la cookie (7)
Tengo algunos problemas con la autenticación de cookies OWIN. Tengo un sitio .Net que tiene algunas páginas MVC que usan autenticación de cookies y recursos WebAPI protegidos por un token de portador.
Cuando cierro la sesión, elimino el token de acceso en el cliente, por lo que las solicitudes posteriores de la API no tendrán el token en el encabezado y, por lo tanto, fallarán la autenticación. Esta parte esta bien.
De la misma manera, también me gustaría que el cierre de sesión elimine la cookie utilizada por las páginas MVC. Hice lo siguiente en el servidor:
[Route("Logout")]
public IHttpActionResult Logout()
{
var ctx = Request.GetOwinContext();
var authenticationManager = ctx.Authentication;
authenticationManager.SignOut();
return Ok();
}
Sin embargo, después de cerrar sesión, todavía puedo visitar la página protegida de MVC aunque la cookie supuestamente habría eliminado la cookie.
Parece tan simple, por lo que podría haber perdido algo.
Gracias,
Acerca del cierre de sesión de ASP .Net MVC no funciona: -
Tuve un problema en el que la aplicación alojada en IIS en los modos de producción no funcionaba correctamente con Chrome
aunque funcionó correctamente mientras usaba el alojamiento de Visual Studio Dev en todos los navegadores, en modo de producción a través de IE
Tuve problemas en Startup.Auth.CS. Asegúrese de que no haya configuraciones duplicadas para las siguientes cosas
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.UseCookieAuthentication((new CookieAuthenticationOptions(.....))
Esto funcionó para mí.
Tíralo a un controlador cuando quieras invalidar la cookie.
En particular, usé esto para actualizar las funciones del usuario para que el usuario no tenga que cerrar sesión manualmente y volver a
@if(User.IsInRole("Admin")){...}
para corregir los menús que se cargan en
@if(User.IsInRole("Admin")){...}
.
Espero que esto ayude a alguien, me tomó un tiempo resolver esto.
var updatedUser = await UserManager.FindByNameAsync(User.Identity.Name);
var newIdentity = await updatedUser.GenerateUserIdentityAsync(UserManager);
AuthenticationManager.SignOut();
AuthenticationManager.SignIn(newIdentity);
Seguí toda la solución anterior pero confundí al final porque el usuario no se desconectó. Finalmente mi problema resuelto por:
Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
FederatedAuthentication.SessionAuthenticationModule.SignOut();
Debido a que utilicé
SessionAuthenticationModule
para guardar las reclamaciones, luego de cerrar la sesión, el usuario pudo usar la aplicación debido a las cookies existentes de FedAut.
Tengo esto para trabajar. Esto es lo que hice:
Cuando llamé a la acción Cerrar sesión anterior, utilicé Fiddler ya que todavía estaba probando la función de cierre de sesión. Puse un punto de interrupción dentro y sí, el método se invoca con éxito. Llama a authenticationManager.SignOut (), sin embargo, mi página protegida aún funciona.
Entonces, en lugar de usar Fiddler, decidí poner el código en el cliente:
var token = sessionStorage.getItem(tokenKey); var headers = {}; if (token) { headers.Authorization = ''Bearer '' + token; } $.ajax({ type: ''POST'', url: ''/api/Account/Logout'', headers: headers }).done(function (data) { self.result("Logout Done!"); }).fail(showError);
Conectó este código a un botón de Cerrar sesión y ¡listo! La página MVC protegida ahora aparece con el error 401 no autorizado esperado después de hacer clic en el botón Cerrar sesión. Como de costumbre, el recurso WebAPI también presenta un error 401 esperado.
Está funcionando después de todo, creo que el proceso de usar Fiddler para probar de alguna manera causa el problema. Sin embargo, no puedo explicar por qué este es el caso.
Gracias por leer.
Tuve un problema similar en los últimos días con algunas muestras de Microsoft Azure. Resuelto usando:
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
headers.Authorization = ''Bearer '' + token;
}
$.ajax({
type: ''POST'',
url: ''/api/Account/Logout'',
headers: headers
}).done(function (data) {
self.result("Logout Done!");
}).fail(showError);
Tuve un problema similar en los últimos días. En lugar de
Request.GetOwinContext().Authentication.authenticationManager.SignOut();
Use UNO (y solo uno) de estos:
Request.GetOwinContext().Authentication.SignOut();
Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.Current.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
Este artículo explica por qué sus cookies no se eliminan: http://dotnet.dzone.com/articles/catching-systemwebowin-cookie
Sé que mi respuesta no es la más basada en la investigación, pero para decir la verdad, simplemente no pude encontrar POR QUÉ mis ejemplos de código proporcionados funcionan para mí. Solo sé que System.Web estropea las cookies de Owins si haces SignOut () de otra manera.
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
FormsAuthentication.SignOut();
Session.Abandon();