Identityserver4 和 Redis 缓存不是线程安全的?

Identityserver4 and Redis cache not thread safe?

我们使用 IdentityServer4 来保护我们在 Azure 上的 ASPnetCore API。今天下午我们遇到了一件非常奇怪的事情。

我们的一个 API 只是 returns 数据库中的所有项目 table 基于我们用户的子声明(例如 userid)。今天有两个用户报告说没有看到他们自己的物品。这段代码 运行 多年来一直完美无缺。

我们的 startup.cs 包含以下内容:

services.AddStackExchangeRedisCache(action =>
            {
                action.Configuration = Configuration["RedisConnectionString"];
            });

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddIdentityServerAuthentication(options =>
                {
                    options.Authority = Configuration["identityServerUrl"];
                    options.ApiName = "<<redacted>>";
                    options.ApiSecret = "<<redacted>>";
                    options.EnableCaching = true;
                    options.CacheDuration = TimeSpan.FromMinutes(5);
                });

由于 Redis 的超时问题,我们添加了以下行:

ThreadPool.SetMinThreads(300, 300);

这与用户标识被交换有什么关系吗? 由于它是一个受保护的 API,所有请求都有一个承载令牌,该令牌在 Redis 中使用上述逻辑进行验证。 userid怎么突然不一样了?

谢谢你和我一起思考!

看来看到所有错误数据的调用被误解了,上面提到的逻辑仍然按预期工作。用户标识正确。 我们还有一些其他问题需要解决,但这与这个问题无关。