web-dev-qa-db-fra.com

OWIN - Authentication.SignOut () ne semble pas supprimer le cookie

J'ai des problèmes avec l'authentification OWIN Cookie. J'ai un site .Net qui contient des pages MVC qui utilisent l'authentification par cookie et les ressources WebAPI protégées par un jeton au porteur.

Lorsque je me déconnecte, je supprime le jeton d'accès sur le client, de sorte que les demandes d'API suivantes n'auront pas le jeton dans l'en-tête et échoueront donc l'authentification. Cette partie est très bien.

De la même manière, j'aimerais également que la déconnexion supprime le cookie utilisé par les pages MVC. J'ai fait ce qui suit sur le serveur:

    [Route("Logout")]
    public IHttpActionResult Logout()
    {
        var ctx = Request.GetOwinContext();
        var authenticationManager = ctx.Authentication;
        authenticationManager.SignOut();
        return Ok();
    }

Cependant, après la déconnexion, je peux toujours visiter la page MVC protégée même si le cookie aurait été supprimé par l'appel de déconnexion.

Cela semble si simple, alors j'ai peut-être raté quelque chose.

Merci,

32
jaeyow

J'ai eu un problème similaire ces derniers jours. Au lieu de

Request.GetOwinContext().Authentication.authenticationManager.SignOut();

Utilisez UN (et un seul) de ceux-ci:

Request.GetOwinContext().Authentication.SignOut();

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

HttpContext.Current.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

Cet article explique pourquoi vos cookies ne sont pas supprimés: http://dotnet.dzone.com/articles/catching-systemwebowin-cookie

Je sais que ma réponse n'est pas la plus basée sur la recherche, mais pour vous dire la vérité, je n'ai tout simplement pas pu trouver POURQUOI mes exemples de code fournis fonctionnent pour moi. Je sais juste que System.Web gâche les cookies Owins si vous faites SignOut () d'une autre manière.

42
Stralos

Cela a fonctionné pour moi. Jetez-le dans un contrôleur lorsque vous souhaitez invalider le cookie. En particulier, je l'ai utilisé pour mettre à jour les rôles de l'utilisateur afin que l'utilisateur n'ait pas à se déconnecter et se reconnecter manuellement pour corriger les menus qui sont chargés sous @if(User.IsInRole("Admin")){...}. J'espère que cela aide quelqu'un - il m'a fallu un certain temps pour comprendre cela.

    var updatedUser = await UserManager.FindByNameAsync(User.Identity.Name);
    var newIdentity = await updatedUser.GenerateUserIdentityAsync(UserManager);
    AuthenticationManager.SignOut();
    AuthenticationManager.SignIn(newIdentity);
2
JSideris

J'ai suivi toutes les solutions ci-dessus mais je me suis trompé à la fin parce que l'utilisateur ne s'est pas déconnecté. Enfin mon problème résolu par:

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
FederatedAuthentication.SessionAuthenticationModule.SignOut();

Parce que j'ai utilisé SessionAuthenticationModule pour y conserver les revendications, puis après la déconnexion, l'utilisateur pouvait utiliser l'application en raison de la FedAut existante dans les cookies.

0
Alex

J'ai eu un problème similaire au cours des derniers jours avec certains exemples Microsoft Azure. Résolu en utilisant:

    public IHttpActionResult Index()
    {
        HttpContext.Current.GetOwinContext().Authentication.SignOut(
            CookieAuthenticationDefaults.AuthenticationType, 
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
        return Ok();
    }
0
uron83
 AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
 FormsAuthentication.SignOut();
 Session.Abandon();
0
Prince Prasad

À propos de ASP. La déconnexion MVC .Net ne fonctionne pas: -

J'ai eu un problème où l'application hébergée sur IIS dans les modes de production ne fonctionnait pas correctement avec Chrome

bien que cela ait fonctionné correctement - en utilisant l'hébergement Visual Studio Dev dans tous les navigateurs - en mode de production sur IE

J'ai eu des problèmes avec Startup.Auth.CS. Assurez-vous que les configurations en double ne sont pas là pour les choses suivantes

 app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
 app.UseCookieAuthentication((new CookieAuthenticationOptions(.....))
0
purvin