问题描述
我正在尝试实现一个后端换前端 .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 (将#修改为@)