Asp.net Core Identity实现用户每次访问站点需登录的方法
实现Asp.net Core Identity强制用户每次访问都登录
1. 调整认证Cookie的过期策略
默认Identity的认证Cookie会持久化到浏览器,导致用户重启浏览器后仍保持登录状态。要实现每次访问都需登录,需将Cookie设置为会话Cookie(关闭浏览器即失效),并禁用持久化:
在Program.cs(.NET 6+)或Startup.cs(旧版本)中配置:
builder.Services.ConfigureApplicationCookie(options => { // 设置Cookie为会话级,无固定过期时长 options.ExpireTimeSpan = TimeSpan.FromMinutes(0); options.SlidingExpiration = false; // 指定登录跳转路径 options.LoginPath = "/Identity/Account/Login"; // 安全配置(生产环境建议开启) options.Cookie.HttpOnly = true; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 不设置持久化过期时间,确保关闭浏览器后Cookie失效 options.Cookie.MaxAge = null; });
2. 配置全局授权拦截
确保站点所有页面/接口都需要认证,未登录用户会自动跳转到登录页:
MVC控制器场景
builder.Services.AddControllersWithViews(options => { var authPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(authPolicy)); });
Razor Pages场景
builder.Services.AddRazorPages(options => { // 强制所有页面需要授权 options.Conventions.AuthorizeFolder("/"); });
3. 禁用"记住我"功能(可选)
如果登录页有"记住我"选项,建议隐藏该控件,或在登录逻辑中强制设置isPersistent为false,避免用户开启持久化登录:
// 登录方法示例 var result = await _signInManager.PasswordSignInAsync( Input.Email, Input.Password, isPersistent: false, // 强制不持久化 lockoutOnFailure: false );
4. 验证效果
完成配置后:
- 用户关闭浏览器再打开站点,会自动跳转到登录页
- 会话期间若浏览器关闭,再次访问需重新登录
- 所有未授权的请求都会被拦截到登录页面
内容的提问来源于stack exchange,提问作者abdalghani kattan
相关产品推荐
相关产品推荐

