0

我正在尝试实现一个后端换前端 .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.csConfigure()类的函数中添加了一行代码来获取注入的对象并将值写入表中。那行得通,但是当我运行我的项目时,我从来没有看到任何令牌被写入缓存。我希望一旦用户通过身份验证,IdentityModel.AspNetCore库就会将令牌写入表中。IDistributedCache

我尝试将services.AddDistributedSqlServerCache()线路移动到调用之前和之后,AddAccessTokenManagement()以防有人可以覆盖调用AddClientAccesTokenManagement()函数中的调用,AddDistributedMemoryCache()但这似乎并不重要。

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

4

0 回答 0