将 ASP.NET Core 5.0 IdentityServer4 升级到 6.0 错误 - 没有这样的表:键

Posted

技术标签:

【中文标题】将 ASP.NET Core 5.0 IdentityServer4 升级到 6.0 错误 - 没有这样的表:键【英文标题】:Upgrading ASP.NET Core 5.0 IdentityServer4 to 6.0 error - no such table: Keys 【发布时间】:2022-01-02 23:51:17 【问题描述】:

将带有 IdentityServer4 的 ASP.NET Core 5.0 升级到 6.0 后出现错误 - 没有这样的表:键

14:50:02.0033786|Failed executing DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "k"."Id", "k"."Algorithm", "k"."Created", "k"."Data", "k"."DataProtected", "k"."IsX509Certificate", "k"."Use", "k"."Version"
FROM "Keys" AS "k"
WHERE "k"."Use" = 'signing'
14:50:02.0179085|An exception occurred while iterating over the results of a query for context type 'xx.com.Data.AppDbContext'.
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: Keys'.

我找不到任何关于 IdentityServer 从 .net 5 迁移到 6 的文档

编辑 当你将 ID4 从 .NET Core 5 升级到 6 时,它就变成了 Duende Server。 .NET 6 没有 ID4..

【问题讨论】:

这里恐怕没有足够的细节来回答你 好的,谢谢你的详细信息。因此,如果您想将 IS4 升级到 Duende,您可以找到迁移指南here。是的,他们在那里提到了Keys 表。无论如何,Duende IdentityServer 是一个商业产品,所以我认为最好问问他们的支持团队 【参考方案1】:

禁用通过数据库管理证书(表“密钥”不存在)。您可以继续从任何其他可用来源加载证书。

services.AddIdentityServer(options => 
    options.KeyManagement.Enabled = false;
)

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 禁用负责安全的服务器的功能在大多数情况下并不是一个好主意,除非您知道自己在做什么。但是,如果我知道我在做什么,我为什么要问一些琐碎的问题呢?是吗?【参考方案2】:

这是 Keys 表的正确架构

CREATE TABLE Keys (
    Id                nvarchar(450)    NOT NULL CONSTRAINT PK_Keys PRIMARY KEY,
    Version           INTEGER NOT NULL,
    Created           datetime2    NOT NULL,
    [Use]               nvarchar(450),
    Algorithm         nvarchar(100)    NOT NULL,
    IsX509Certificate INTEGER NOT NULL,
    DataProtected     INTEGER NOT NULL,
    Data              nvarchar(Max)    NOT NULL
);

CREATE INDEX IX_Keys_Use ON Keys (
    [Use]
);

CREATE INDEX sqlite_autoindex_Keys_1 ON Keys (
    Id 
);

【讨论】:

这是用于 sql server 的。我的答案是 sqlite。【参考方案3】:

解决这个问题的快速方法(sqlite):

CREATE TABLE Keys (
    Id                TEXT    NOT NULL
                              CONSTRAINT PK_Keys PRIMARY KEY,
    Version           INTEGER NOT NULL,
    Created           TEXT    NOT NULL,
    Use               TEXT,
    Algorithm         TEXT    NOT NULL,
    IsX509Certificate INTEGER NOT NULL,
    DataProtected     INTEGER NOT NULL,
    Data              TEXT    NOT NULL
);

CREATE INDEX IX_Keys_Use ON Keys (
    "Use"
);

CREATE INDEX sqlite_autoindex_Keys_1 ON Keys (
    Id COLLATE BINARY
);

【讨论】:

以上是关于将 ASP.NET Core 5.0 IdentityServer4 升级到 6.0 错误 - 没有这样的表:键的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core 5.0 中的子域路由

Entity Framework Core 5.0 如何将多对多连接的 LINQ 转换为使用 ASP.NET 成员资格的交集表

为 ASP.NET Core 5.0 - EF Core 5.0 Web App 配置 PostgreSQL 连接字符串以在 MS 或 Linux 云上运行?

如何按照存储库模式在 Asp.Net Core 5.0 项目上实现 .Net Core Identity?

从 ASP.NET Core 3.1 升级到 ASP.NET 5.0 后,User.Claims 为空

Asp.Net Core Web API 5.0 和 Angular 中基于自定义角色的授权