高速缓存在Identity Server 4中似乎无法正常工作

时间:2018-07-27 14:57:29

标签: c# .net-core identityserver4

我正在尝试使用其Caching方法向我们的IS4实现添加缓存。但是,我的实现似乎对登录速度或每次登录数据库中查询的数量没有任何影响(我希望缓存可以减少两者)。

我为实现缓存所做的更改如下:

在Startup.cs ConfigureServices中添加了以下内容

更新了services.AddIdenttiyServer()调用以包括以下行:

.AddInMemoryCaching()
.AddClientStoreCache<IClientStore>()
.AddResourceStoreCache<IResourceStore>()
.AddCorsPolicyCache<ICorsPolicyService>();

更新的ConfigureServices还具有以下内容:

services.AddScoped<ICorsPolicyService, DefaultCorsPolicyService>();
services.AddScoped<IClientStore, ClientStore>();
services.AddScoped<IResourceStore, ResourceStore>();

这似乎是我需要实现的唯一事情,并且在应用程序正常运行时,缓存似乎没有任何作用。我想念什么?

2 个答案:

答案 0 :(得分:1)

基本上,您需要做两件事:

首先实现IClientStore

public class ClientStore : IClientStore
{
    private readonly IClientService clientService;

    public ClientStore(IClientService clientService)
    {
        this.clientService = clientService;
    }

    public Task<Client> FindClientByIdAsync(string clientId)
    {
        var client = this.clientService.GetById(clientId);
        return Task.FromResult(client);
    }
}

ClientService是我从数据库获取客户端的实现,因此,您需要自己放置它。

然后在Startup.cs中,您需要:

services.AddIdentityServer(options =>
            {
                options.Caching.ClientStoreExpiration = new TimeSpan(0, 5, 0);
            })
            .AddInMemoryCaching()
            .AddClientStoreCache<ClientStore>()
            .// More stuff that you need

这是针对Client Caching的,但是对于CorsResourceStore来说是完全相同的。

我认为您缺少options.Caching.ClientStoreExpiration部分。从那里开始。

希望这会有所帮助。

PS:忘了提及-您无需显式注入IClientStore的实现。通过将其添加到.AddClientStoreCache<ClientStore>()中,它将被注入。但是(例如,在我的示例中)如果商店使用了其他服务,则需要注入它们。

答案 1 :(得分:0)

没有标准的方法来缓存用户。

仅缓存:

  1. 客户端-AddClientStoreCache
  2. 资源-AddResourceStoreCache
  3. CorsPolicy-AddCorsPolicyCache

您可以从documentations

获得更多详细信息