.net core 保持下游API JWT的更新

.net core 保持下游API JWT的更新,.net-core,jwt,.net Core,Jwt,My.NET Core API调用JWT保护的下游API,该API通过client\u凭据OAuth授权类型身份验证获得。该JWT仅在一小时内有效,需要刷新。下游API在单例服务中内部公开,服务客户端不应该关心令牌刷新 一个天真的实现(我目前拥有)是,服务检查当前JWT是否有效,如果无效,则使用给定的凭据刷新JWT。然后JWT被缓存3600秒(或之前的一点点),同样的事情再次发生 这适用于“流量”较低的情况,即只有一个服务调用触发此刷新。然而,在高“流量”场景中,这会造成瓶颈,其中多个请求将等待

My.NET Core API调用JWT保护的下游API,该API通过
client\u凭据
OAuth授权类型身份验证获得。该JWT仅在一小时内有效,需要刷新。下游API在单例服务中内部公开,服务客户端不应该关心令牌刷新

一个天真的实现(我目前拥有)是,服务检查当前JWT是否有效,如果无效,则使用给定的凭据刷新JWT。然后JWT被缓存3600秒(或之前的一点点),同样的事情再次发生

这适用于“流量”较低的情况,即只有一个服务调用触发此刷新。然而,在高“流量”场景中,这会造成瓶颈,其中多个请求将等待该身份验证完成(或者更糟的是,如果允许此服务被无状态使用,并且并行地,JWT刷新会多次完成)

我使用了一个后台服务,它在启动时刷新令牌,然后在每个间隔(减去宽限期)刷新令牌,并且只向下游API服务公开实际令牌。然而,这似乎过于复杂,归结为实际问题:

  • 刷新有时间限制的下游API键的最佳实践是什么
  • 在.NET核心世界中是否有现成的解决方案?我已经找到了
    Microsoft.Identity.Web
    ,但它只在Azure环境下工作(在我的情况下这是不可能的)
使用

services.AddAccessTokenManagement(选项=>
{
options.Client.Clients.Add(“identityserver”,new ClientCredentialsTokenRequest
{
地址=”https://demo.identityserver.io/connect/token",
ClientId=“m2m.short”,
ClientSecret=“secret”,
Scope=“api”//可选
});
});
services.AddHttpClient(客户端=>
{
client.BaseAddress=新Uri(“https://demo.identityserver.io/api/");
})
.AddClientAccessTokenHandler();

检查此项:非常感谢@Artur,请随意添加此项作为答案,我将奖励您奖金。这正是我一直在寻找的,即使在谷歌搜索了几个小时后,我仍然没有找到它。
services.AddAccessTokenManagement(options =>
    {
        options.Client.Clients.Add("identityserver", new ClientCredentialsTokenRequest
        {
            Address = "https://demo.identityserver.io/connect/token",
            ClientId = "m2m.short",
            ClientSecret = "secret",
            Scope = "api" // optional
        });
    });

services.AddHttpClient<MyClient>(client =>
    {
        client.BaseAddress = new Uri("https://demo.identityserver.io/api/");
    })
    .AddClientAccessTokenHandler();