如何在数据库 Identity Server 中保留用户同意信息

How to persist user consent information in database Identity Server

我正在使用 IdentityServer4,每当用户首次登录时,应用程序都会向用户显示 同意屏幕,这是预期的应用程序范围。如果用户单击“是”并单击记住选项,则当用户第二次登录时,应用程序不会显示同意屏幕,这也是预期的。我面临的问题是,每当我重新启动 IdentityServer(或进行部署)时,用户同意信息不会持续存在,并且会再次为用户显示同意屏幕。任何人都可以帮助我知道有什么方法可以将用户同意信息存储到数据库中,或者当应用程序在 运行 中时我们如何知道信息存储在哪里。我做了一些调试,但找不到它。提前致谢。

将引用 IdentityServer4.EntityFramework.Storage nuget 包添加到 identity server 4 项目,然后在 startup.cs

service.AddIdentityServer((options) => {})
.AddPersistedGrantStore<PersistedGrantStore>()
// Add other services.

PersistedGrantStore 需要 PersistedGrantDbContext 使用 EntityFramework 并且需要配置 DbContext(与配置其他 EntityFramework DbContext 的方式相同)。例如使用 SQL Server

services.AddDbContext<PersistedGrantDbContext>(options =>
  options.UseSqlServer(connectionString));

您可以使用dotnet-ef命令工具在数据库中创建和初始化表。

您也可以拥有自己的 IPersistedGrantStore 服务实现。