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怎么突然不一样了?
谢谢你和我一起思考!
看来看到所有错误数据的调用被误解了,上面提到的逻辑仍然按预期工作。用户标识正确。
我们还有一些其他问题需要解决,但这与这个问题无关。
我们使用 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怎么突然不一样了?
谢谢你和我一起思考!
看来看到所有错误数据的调用被误解了,上面提到的逻辑仍然按预期工作。用户标识正确。 我们还有一些其他问题需要解决,但这与这个问题无关。