IsPersistent pas de travail - Cookie valide uniquement pour la session en cours
J'ai un ASP.NET MVC 5
application à l'aide de ASP.NET Identity 2.1.0
pour l'authentification de l'utilisateur.
Tout a bien fonctionné dans le passé, mais maintenant, j'ai découvert que la persistance des sessions utilisateur ne fonctionne plus. Je ne peux pas dire ce changement de cassé, mais il a travaillé quand j'ai mis en place l'Identité (converti à l'application de SimpleMembership
) et c'est ma logique, j'ai en ce moment:
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: true);
SignInManager
est mon ApplicationSignInManager
basé sur SignInManager<ApplicationUser, int>
et model.RememberMe
est true
.
Et ma configuration:
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = ApplicationCookieIdentityValidator.OnValidateIdentity(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
Tout fonctionne bien, sauf la persistance des sessions utilisateur. J'ai vérifié les cookies renvoyé par mon serveur et le .AspNet.ApplicationCookie
est toujours retourné comme "valide pour la session en cours" au lieu d'une date dans le futur. Donc, lorsque vous fermez et rouvrez le navigateur j'ai besoin de vous connecter à nouveau...
Quelqu'un a une idée de pourquoi cela ne fonctionne pas (ou plus)?
P. S.: j'ai remplacé SignInAsync
dans mon ApplicationSignInManager
parce que je fais un peu personnalisée, logique, mais j'ai même vérifié avec le débogueur et pour l'appel suivant:
await base.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
est true
, de sorte qu'il doit créer une persisten cookie.
validateInterval: TimeSpan.FromMinutes(0)
peuvent être en cause. Parce que sur chaque demande, il se régénère cookie et définit un nouveau. Essayez de définir validateInterval
à quelque chose de plus que de 0 et de voir si cela fonctionne.Merci, c'était ça. A qui change avec V 2.1? Parce qu'il a certainement travaillé dans le début (V 2.0). De toute façon: ce Post est une réponse et je vais l'accepter. J'ai maintenant besoin de trouver l'écart autour de cela, car j'ai besoin (en raison de SSO) de validation à chaque requête.
OriginalL'auteur ChrFin | 2014-09-08
Vous devez vous connecter pour publier un commentaire.
C'est un bug connu de l'Identité et en regardant sur cette réponse il n'est pas très nouveau.
Lorsque le témoin est régénéré à chaque requête, "IsPersisted" drapeau n'est pas définie, quand, même quand il a été fixé à l'origine, cookie.
Pour contourner ce problème, vous devez mettre en place votre propre version de cookie validateur qui va définir le drapeau comme il faut.
Je pense que j'ai la solution pour vous, mais je n'ai pas compilé ou testé il suffit simplement d'une direction générale de l'endroit où vous devez aller. Voir ce résumé de code complet.
C'est juste un
SecurityStampValidator
code de decompiler. J'ai ajouté des lignes 91-96. Fondamentalement, je prends "IsPersistent" drapeau de la précédente cookie et l'ajouter à la nouvelle cookie, lorsqu'il est créé. Qui n'a pas été fait dans le non-version modifiée.Et puis dans votre Auth.Config:
Attention cependant, quand une nouvelle version est sortie, vérifier si cela a été corrigé, de sorte que vous pouvez supprimer le fix sale. Cette question est signalé à être fixé, mais peu de temps après la v2.1.
ApplicationCookieIdentityValidator
dans mon code) j'ai juste besoin d'ajouter vos changements trop -> travail!Oui, j'ai remarqué que le nom est différent de la norme. Content que ça aide!
bon code! Dirait qu'il manque
using Microsoft.Owin.Security;
pour accéder à laAuthenticationProperties
type de bienCela fonctionne pour moi, stackoverflow.com/questions/31946582/...
une année? de plus, comme les 4 ans depuis ma réponse. Identité 2 n'est pas plus développé, qu'attendez-vous?
OriginalL'auteur trailmax
Mise à jour à la fois
AspNet.Identity.Core
etAspNet.Identity.Owin
pour 2.2.1 devrait résoudre ce problème.yep, même problème avec l'identité de base...
stackoverflow.com/questions/31946582/...
OriginalL'auteur Mr. Flibble
Afin d'empêcher un utilisateur loggedin sur la fermeture du navigateur en Mvc d'Identité. Le code ci-dessous est ce qui a fonctionné pour moi dans le Démarrage.Auth.cs de la classe.
OriginalL'auteur Kainat Jan