Ich habe eine ASP.NET MVC 5
Anwendung mit ASP.NET Identity 2.1.0
für die Benutzerauthentifizierung.
In der Vergangenheit hat alles gut funktioniert, aber jetzt habe ich herausgefunden, dass persistente Benutzersitzungen nicht mehr funktionieren. Ich kann nicht sagen, welche Änderung dieser brach, aber es funktionierte, als ich Identität umgesetzt (die Anwendung von SimpleMembership
umgewandelt), und dies ist meine Logik, die ich im Moment haben:IsPersistent funktioniert nicht - Cookie ist nur gültig für aktuelle Sitzung
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: true);
SignInManager
meine ist ApplicationSignInManager
basierend auf SignInManager<ApplicationUser, int>
und model.RememberMe
ist true
.
Und mein Setup:
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);
Alles funktioniert gut, außer persistierenden die Benutzersitzungen. Ich überprüfte die Cookies, die von meinem Server zurückgegeben wurden, und die .AspNet.ApplicationCookie
wird immer als "gültig für aktuelle Sitzung" anstatt eines Datums in der Zukunft zurückgegeben. Wenn ich den Browser schließe und wieder öffne, muss ich mich erneut einloggen ...
Hat jemand eine Idee, warum das nicht funktioniert (mehr)?
PS: ich außer Kraft gesetzt habe SignInAsync
in meinem ApplicationSignInManager
, weil ich dort einige benutzerdefinierte Logik zu tun, aber ich sogar mit dem Debugger und für den folgenden Aufruf geprüft:
await base.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
ist true
, so ist es schaffen soll ein persistenter Keks.
Ich vermute 'validateInterval: TimeSpan.FromMinutes (0)' kann dies verursachen. Denn bei jeder Anfrage wird das Cookie neu generiert und ein neues gesetzt. Versuchen Sie, 'validateInterval' auf etwas mehr als 0 zu setzen und sehen Sie, ob das funktioniert. – trailmax
@trailmax: Danke, das war es.Änderte sich das mit V 2.1? Weil es am Anfang definitiv funktioniert hat (mit V 2.0). Wie auch immer: Post dies als Antwort und ich werde es akzeptieren. Ich muss jetzt darum herum finden, wie ich (wegen SSO) Validierung für jede Anfrage brauche. – ChrFin