Ich habe eine Anforderung zu beseitigen mehrere aktive Sitzungen von erlaubt auf unserer Website.Wie verhindere ich mehrere aktive Sitzungen in ASP.NET Identity 2.2.1 ordnungsgemäß, ohne das Kennwortänderungsverhalten zu beeinflussen?
Es ist mein Verständnis, dass dies tun Sie den validateInterval Parameter der OnValidateIdentity Eigenschaft des CookieAuthenticationProvider wie unten manipulieren:
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(0), //Changed from default of 30 minutes
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
Ich änderte den Standardwert von 30 Minuten bis 0 für die Prüfung und es funktioniert wie vorausgesehen. Wenn ich mich bei einem zweiten Browser anmelde, wird die nächste Aktion im ersten Browser auf die Anmeldeseite umgeleitet.
Ich erlaube Benutzern auch, ihr Kennwort zu ändern, wann immer sie wollen (nach dem Login). Wenn die validateInterval-Eigenschaft null ist, wird der Benutzer unmittelbar nach dem Senden einer Kennwortänderung abgemeldet. Sie melden sich dann mit dem neuen Passwort an und können die Seite wie gewohnt nutzen.
Wenn ich den validateInterval-Parameterwert auf 10 Sekunden ändere, kann der Benutzer die aktuelle Sitzung fortsetzen, nachdem er eine Kennwortänderung für 10 Sekunden gesendet und dann zur Anmeldeseite umgeleitet wurde. diese
Im Innern der Change Wirkung der ManageController Klasse des Standard-Code, der nach einer erfolgreichen Kennwortänderung führt, ist:
if (result.Succeeded)
{
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
if (user != null)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
return RedirectToAction("Index", new { Message = ManageMessageId.ChangePasswordSuccess });
}
Ich dachte, dass die Linie SignInManager.SignInAsync würde die Sitzung des Benutzers hält auch nicht durch ein Passwort gehen Änderung (von Logout User From all Browser When Password is changed), aber es scheint, zusätzlich durch den validateInterval Parameter kontrolliert zu werden.
Wenn ich einem Benutzer erlauben wollte, sein Kennwort während einer authentifizierten Sitzung zu ändern, ohne dass er sich erneut anmelden musste, konnte ich dies mit ASP.NET Identity tun und trotzdem mehrere aktive Sitzungen steuern? Gibt es eine bessere Möglichkeit, mehrere aktive Sitzungen zu steuern, ohne den Parameter validateInterval (von Prevent multiple logins) zu ändern?
Vielen Dank für Ihre Hilfe. Um zu verdeutlichen, ob dieses Verhalten beabsichtigt ist, geht es mir gut. Ich möchte nur verstehen, was vor sich geht, damit ich das Verhalten bei Bedarf meinem Chef verteidigen kann.
Edit:
scheiterte ich zu erwähnen, dass ich auch die Sicherheit Stempel in der Anmeldung im Anmelde über SignInManager das Vorzeichen direkt vor aktualisieren.
Ich habe meinen ursprünglichen Beitrag bearbeitet. Ich habe einen zusätzlichen Schritt ausgelassen. Ich verwende Fiddler, um Anfragen an den ersten Browser erneut zu verteilen, nachdem ich mich in einen zweiten Browser eingeloggt habe, und bekomme jedes Mal eine Weiterleitung zu meiner Login-Seite. Wenn ich validateInterval auf etwas anderes als Null ändere, darf ich mehrere Authentifizierungen haben. – user2564788
Wieder hat dieser Code nichts damit zu tun, was Sie erreichen wollen. Wenn Sie das Validierungsintervall auf Null setzen, wird die Anmeldefunktion überhaupt nicht ausgeführt, da alle Authentifizierungen sofort ungültig sind. Sie verhindern nicht mehrere Authentifizierungen. Sie verhindern * jegliche * Authentifizierung, die die Nebeneffekt hat, keine Mehrfachnennungen zuzulassen (d. h. 0 ist nie größer als 1). –
Ich glaube, ich habe das Problem verwirrt. Ich führe dieses Setup derzeit in einer Testumgebung aus und habe kein Problem, sich zu authentifizieren oder authentifiziert zu bleiben. Erst wenn ich mein Passwort ändere, bin ich sofort ausgeloggt. Ich sehe jetzt, dass die UserManager-Methode ChangePasswordAsync einen neuen Sicherheitsstempel generiert (http://www.jamessturtevant.com/posts/ASPNET-Identity-Cookie-Authentication-Timeouts/). Das in Verbindung mit dem Validierungsintervall von Null bringt mich raus. Ich dachte, vielleicht könnte ich das verhindern, aber es scheint eingebaut zu sein. Danke für die Hilfe. – user2564788