使用 IHttpClientFactory 使用外部 API 时存储访问和刷新令牌的位置。网络核心

D.B*_*D.B 2 token asp.net-core refresh-token httpclientfactory

我使用 IHttpClientFactory 发送请求并接收从我的 Web API 到使用 Net Core 2.2 的外部 API 的 HTTP 响应。

用于向 API 发送请求的访问令牌和刷新令牌已存储在 appsettings.json 中。当请求返回 403 或 401 错误时,我会动态获取一个新令牌并将其添加到请求的标头中。

但是如何使用新的访问和刷新令牌更新 appsettings.json 以便将其用于后续请求。

是否有比 appsettings.json 更好的方法来存储访问和刷新令牌?

Ham*_*eed 5

由于您正在使用IHttpClinetFactory(并且假设您也使用类型化客户端),您可以创建自己的HttpMessageHandler,它将在您发出任何请求之前触发Typed Client,并通过 DI 将其链接到您的typed client,如下所示:

services.AddHttpClient<IServiceContract, ServiceImplementation>()
                .AddHttpMessageHandler<TokenHandler>();
Run Code Online (Sandbox Code Playgroud)

在其中,TokenHandler您可以检查请求标头中是否有令牌。如果没有检查缓存(内存缓存)中是否有可用令牌,则验证令牌的生命周期。

如果令牌过期或者缓存中没有该令牌,则发出新的令牌并将其存储在缓存中。

我确信有更好的方法,但那是我会做的。


注意:如果您的应用程序分布在多个服务器上,则使用分布式缓存而不是内存缓存。您可以通过 DI 轻松添加。


更新:

您可以像这样注册您的处理程序:

services.AddTransient<TokenHandler>();
Run Code Online (Sandbox Code Playgroud)