【发布时间】:2022-07-08 12:45:55
【问题描述】:
我在 razor 网站中使用 Asp.Net 核心身份框架 (v5.0)。 以下部分在 startup.cs 中
services.AddIdentity<IdentityUser, IdentityRole>(options =>
{
options.Password.RequiredLength = 8;
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireUppercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Lockout.AllowedForNewUsers = true;
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.DefaultLockoutTimeSpan = new TimeSpan(0, 0, 5, 0);
options.SignIn.RequireConfirmedEmail = false;
})
一切正常,但是当我注销用户时,客户端cookie被删除但服务器端会话仍然打开。
因此,当我将 http 请求捕获到需要身份验证的页面之一时,请注销用户并稍后重播捕获的请求,页面加载而不是登录请求。
由于安全要求,这不可用。
我将注销代码简化为这个
@page
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@functions
{
public async Task<IActionResult> OnGet()
{
if(SignInManager.IsSignedIn(User))
{
await SignInManager.SignOutAsync();
}
return RedirectToPage();
}
}
我尝试了一些使用 context.SignOutAsync 描述的解决方案 here 但 httpcontext 不包含 SignOutAsync 方法。 (也许这是因为它使用的是旧版本)
有没有办法关闭服务器端会话?
【问题讨论】:
-
“服务器端会话仍处于打开状态”是什么意思?
-
不知道是不是叫session,但无论如何用户注销后请求中发送的cookie仍然有效。我希望在重新发送此 cookie 时,身份验证失败。
标签: c# asp.net-core asp.net-identity razor-pages