Używam asp.net identity 2.0 do uwierzytelniania (Owin middleware) w mojej aplikacji. Przejęcie sesji: Kiedy się loguję Tożsamość tworzy AspNet.ApplicationCookie.then skopiowałem AspNet.ApplicationCookie value.Then i wylogowałem się z aplikacji. Po Logout, ręcznie tworzę ciasteczko (AspNet.ApplicationCookie) i robię odświeżenie To przekierowuje ja strona główna.Eskalacja uprawnień i przejmowanie sesji w tożsamości MVC5
Privilege Escalation: Jednocześnie Zalogowałem się jako AI użytkownika kopiowane (AspNet.ApplicationCookie) jego ciasteczka i zalogowałem out.After Zalogowałem się jako użytkownik BI jestem edycji użytkownik B Cookie i wklejony Użytkownik A cookie i go zapisałem. Po odświeżeniu przeglądarki mogę uzyskać dostęp i uwierzytelnianie UserA.
Usuwam wszystkie sesje i usuwam wszystkie pliki cookie Po wylogowaniu. Nawet tożsamość Asp.Net (Owin) generuje nowe AspNet.ApplicationCookie za każdym razem.Ale nadal akceptuje stare ciasteczka i daje mi dostęp . Nie wiem dlaczego? Czy ktoś może mi dać unieważnić stary AspNet.ApplicationCookie po wylogowaniu. To jest mój kod w Startup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
// To jest kod wylogowania
public ActionResult LogOff ()
{
//Delete all cookies while user log out
string[] myCookies = Request.Cookies.AllKeys;
foreach (var cookies in myCookies)
{
Response.Cookies[ cookies ].Expires = DateTime.Now.AddDays(-1);
}
Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
// AuthenticationManager.SignOut();
Session.Clear();
Session.RemoveAll();
Session.Abandon();
return RedirectToAction("LoginPage", "Account");
}
// To jest mój login kod kontrolera
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}