在ASP.net核心3上,当用户注销时,我想使存在于不同设备上的所有cookies失效。用户可能已经从几个不同的浏览器登录,用户可以选择使用持续30天的“记住我”。到目前为止,我对解决这个问题的理解是:
我的问题是关于第4点)在哪里以及如何在securityStamp核心框架中编写这个ASP.net检查并重定向到登录页面?
这是我登录时的代码
string securityStamp = Guid.NewGuid().ToString();
saveSecurityStampInDB(securityStamp, user.Id);
var userClaims = new List<Claim>()
{
new Claim("id", user.Id.ToString()),
new Claim("securityStamp", securityStamp),
new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string")
};
var grantMyIdentity = new ClaimsIdentity(userClaims, "User Identity");
var userPrincipal = new ClaimsPrincipal(new[] { grantMyIdentity });
if (rememberMe.HasValue && rememberMe.Value)
{
await HttpContext.SignInAsync(userPrincipal, new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddMonths(1)
});
}
else
{
await HttpContext.SignInAsync(userPrincipal);
}更新:我有自己的用户表,我不使用entityFramework和整个内置身份管理。
发布于 2022-05-04 03:16:00
可以使用SecurityStamp属性和SecurityStampValidatorOptions.ValidationInterval属性使注销用户的cookie无效。
1.在ValidationInterval中注册ConfigureServices
services.Configure<SecurityStampValidatorOptions>(options =>
{
options.ValidationInterval = TimeSpan.FromSeconds(1);//set your time
});2.在注销中添加userManager.UpdateSecurityStampAsync(),如下所示
public async Task<IActionResult> Logout()
{
var userid = userManager.GetUserId(User);
var user = await userManager.FindByIdAsync(userid);
await userManager.UpdateSecurityStampAsync(user);
await signInManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}结果:

https://stackoverflow.com/questions/72104560
复制相似问题