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

问题描述

我正在使用IdentityServer4,每当用户首次登录时,应用程序就会向用户显示同意屏幕,以显示应用程序对用户的作用域。如果用户单击“是”并单击“记住”选项,则该应用程序在用户第二次登录后仍未显示同意屏幕。在这里,我面临的问题是每当我重新启动IdentityServer时(或进行部署时),用户同意信息就不会保留,并且再次为用户显示同意屏幕。任何人都可以帮助我知道是否有任何方法可以将用户同意信息存储到数据库中,或者在应用程序运行时如何知道信息的存储位置。我做了一些调试,但是找不到。预先感谢。

解决方法

将参考IdentityServer4.EntityFramework.Storage nuget包添加到身份服务器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服务实现。