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

IdentityServer4(v3.1.x)搭配Entity Framework会话受IIS回收不持久问题

问题根源

ASP.NET Core 默认将DataProtection加密密钥存储在应用进程内存中,当IIS应用池回收、重启或者多实例部署时,原有密钥会丢失,导致之前签发的用户登录Cookie无法被解密,会话直接失效。这就是为什么你的会话时长和IIS应用池回收间隔绑定,和你配置的Cookie有效期、Token有效期均不匹配的核心原因。

你已完成IS4配置数据、运行时数据的数据库持久化,也配置了14天的Cookie有效期,但缺失了DataProtection密钥的持久化配置,因此会话无法跨应用池回收、跨实例保留。

修复步骤

  1. 先安装对应版本的NuGet包:
    Microsoft.AspNetCore.DataProtection.EntityFrameworkCore
    注意版本要和你项目的ASP.NET Core版本、IdentityServer4版本兼容。

  2. 在ConfigureServices方法中添加DataProtection持久化配置,替换示例中的IdentityServerDBContext为你项目中实际使用的DbContext即可:

// 持久化DataProtection密钥到数据库
services
    .AddDataProtection()
    .PersistKeysToDbContext<IdentityServerDBContext>();
  1. 生成并执行数据库迁移,将DataProtection密钥存储表同步到数据库:
Add-Migration AddDataProtectionKeys
Update-Database

额外注意

如果是多实例部署场景,需要保证所有实例使用相同的签名证书、相同的DataProtection密钥存储,才能实现跨实例会话共享。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:45:07