微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决无法从 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 举报,一经查实,本站将立刻删除。