.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
相关产品推荐
相关产品推荐

