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

.NET Core Web应用会话提前失效,如何延长至6小时?

解决.NET Core Identity会话提前过期问题

针对你配置的.NET Core Identity认证会话仅几分钟就过期的问题,可从以下几个方向排查修复:

1. 检查JWT Token生成逻辑(若涉及JWT场景)

你同时配置了JWT Bearer认证,若部分请求依赖JWT Token,需确保生成Token时设置了6小时的过期时间。当前JWT配置中RequireExpirationTime = false允许无过期时间的Token,但如果生成的Token本身过期时长过短,会触发提前跳转登录。

生成Token时需明确设置过期时间:

var tokenDescriptor = new SecurityTokenDescriptor
{
    // 其他必要配置(Issuer、Audience、SigningKey等)
    Expires = DateTime.UtcNow.AddHours(6), // 设置6小时过期
    // ...
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);

2. 调整SecurityStampValidator验证间隔

你设置了options.ValidationInterval = TimeSpan.Zero,这会导致每次请求都强制验证用户安全戳。若用户安全戳被意外修改(如后台更新用户信息、角色),会立即触发注销。

若无需即时注销用户,可恢复默认验证间隔或自定义合理时长:

services.Configure<SecurityStampValidatorOptions>(options =>
{
    options.ValidationInterval = TimeSpan.FromMinutes(30); // 默认值,或按需调整
});

若必须保留即时注销逻辑,需排查用户安全戳是否被无故修改。

3. 修正Cookie的SecurePolicy配置

options.Cookie.SecurePolicy = CookieSecurePolicy.Always要求Cookie仅通过HTTPS传输。若开发环境使用HTTP,或生产环境未配置HTTPS,浏览器会拒绝保存Cookie,导致会话丢失。

可根据环境动态调整:

options.Cookie.SecurePolicy = Environment.IsDevelopment() 
    ? CookieSecurePolicy.None 
    : CookieSecurePolicy.Always;

4. 确认中间件注册顺序

确保认证、授权中间件在路由中间件之前注册,顺序错误会导致认证逻辑失效:

app.UseAuthentication();
app.UseAuthorization();
// 后续注册路由中间件(如app.UseRouting()、app.UseEndpoints())

5. 清理浏览器缓存

测试前清除浏览器的Cookie和缓存,避免旧的过期Cookie干扰新会话的验证。

内容的提问来源于stack exchange,提问作者jstuardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:56:01