You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:40:50