ASP.NET Core 5.0带IdentityServer4升级6.0报错no such table: Keys
升级ASP.NET Core 6.0后IdentityServer4相关
Keys表缺失报错解决方案 报错核心原因:IdentityServer4最后支持的运行时版本为.NET 5,官方停止维护后原团队推出的.NET 6+对应的授权框架为收费的Duende Identity Server。你在升级项目过程中误将IdentityServer4相关依赖替换为Duende包后,Duende默认启用了自动密钥管理功能,会尝试查询数据库中的
Keys表读取签名密钥,现有数据库未生成该表就会触发本次SQLite报错。
可选解决方案
- 方案1:回退到.NET 5继续使用IdentityServer4
将项目目标框架改回.NET 5,保留原有IdentityServer4的稳定版本依赖,不需要调整现有数据结构和业务逻辑即可正常运行。 - 方案2:在.NET 6运行时兼容原有IdentityServer4
不升级IdentityServer4相关Nuget包,显式在项目中引用ID4依赖的兼容版ASP.NET Core类库,保持原有ID4的服务注册逻辑不变,不会触发查询Keys表的逻辑,可直接在.NET 6环境下运行。 - 方案3:正式迁移到Duende Identity Server
确定要适配Duende的话按以下步骤操作:- 卸载所有IdentityServer4相关Nuget包,安装对应.NET 6版本的Duende Identity Server包
- 执行迁移命令生成
Keys表结构:在包管理控制台执行Add-Migration AddDuendeKeysTable,随后执行Update-Database同步到数据库 - 调整启动类中的授权服务注册逻辑,适配Duende的配置语法,原有客户端、资源等配置可基本复用
- 方案4:开发环境临时绕过
开发调试阶段可以显式指定签名证书,关闭自动密钥持久化功能,就不会触发Keys表查询,示例配置如下:builder.Services.AddIdentityServer() .AddSigningCredential(new X509Certificate2("你的签名证书路径.pfx", "证书密码")) // 其余原有配置保持不变
内容的提问来源于stack exchange,提问作者Boppity Bop
相关产品推荐
相关产品推荐

