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 更好的方法来存储访问和刷新令牌?
由于您正在使用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)
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |