无法从 AddDistributedSqlServerCache() 获取 AddAccessTokenManagement() 以使用缓存服务

问题描述

我正在尝试实现一个后端换前端 .NET Core 3.1 项目,其中从 Identity Server 检索的令牌存储在 sql 缓存中。 BFF 基于 SpaHost - GitHub 的实现。在项目中,我使用 IdentityModel.AspNetCore 来管理令牌生命周期和缓存。

为了将令牌存储在缓存中,使用以下架构创建了表 BffTokenCache

CREATE TABLE [dbo].[BffTokenCache](
    [Id] [nvarchar](900) NOT NULL,[Value] [varbinary](max) NOT NULL,[ExpiresAtTime] [datetimeoffset](7) NOT NULL,[SlidingExpirationInSeconds] [bigint] NULL,[AbsoluteExpiration] [datetimeoffset](7) NULL
 CONSTRAINT [PK_BffTokenCache] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF,STATISTICS_norECOmpuTE = OFF,IGnorE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON,OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

在我删除的 SpaHost 项目的 Startup.cs 类中

services.AdddistributedMemoryCache();

并将其替换为

services.AdddistributedsqlServerCache((options) =>
{
   options.ConnectionString = Configuration.GetConnectionString("ConnectionString_BffTokenCache");
   options.SchemaName = "dbo";
   options.TableName = "BffTokenCache";
});

为了验证连接字符串和表是否适用于缓存服务,我在 Startup.cs 类的 Configure() 函数添加了一行代码获取注入的 {{1 }} 对象并将值写入表。那行得通,但是当我运行我的项目时,我从未看到任何令牌被写入缓存。我希望一旦用户通过身份验证,IdentityModel.AspNetCore 库就会将令牌写入表中。

我尝试将 IdistributedCache 行移动到 services.AdddistributedsqlServerCache() 调用之前和之后,以防有人可以覆盖调用 AddAccesstokenManagement()AddClientAccesTokenManagement() 函数中的调用但这似乎无关紧要。

--更新 我的理解 IdentityModel.AspNetCore 库似乎不正确。只有客户端信息似乎是一个可缓存的对象,目前我没有这样做。当请求刷新令牌而不是缓存时,用户令牌数据被添加到字典中。所以我原来的问题是无关紧要的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)