IE盒子

搜索
查看: 82|回复: 1

ASP.NET Core 定时刷新第三方 Token

[复制链接]

3

主题

8

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-3-6 05:29:41 | 显示全部楼层 |阅读模式
前言

在《ASP.NET Core 自动刷新JWT Token》中我们实现了为客户端自动提供最新的Token。
但是,当我们的 http://ASP.NET Core 应用需要调用第三方 API 时,如何更优雅地刷新第三方提供的 Token 呢?
临时加更干货分享
大家能看到这里,已是对我们的支持了。分享一组11月录制的.NET6零基础教程。我们喜欢做这样的分享,它足够的基础,对新手友好。如果需要的话,就来免费领取吧!


资料免费自取:

由于内容过多不便呈现,需要视频教程和配套源码的小伙伴,点击下方卡片!
也可点击下方卡片:点击后自动复制威芯号,并跳转到威芯。搜索威芯号添加,内容已做打包,备注知乎
即可免费领取,注意查收!
思路

我们可以在启动时就获取第三方提供的 Token 并保存到全局变量,然后在 Token 过期时间内定时获取第三方最新的 Token 并更新全局变量。
这样每次调用 HttpClient 访问第三方 API 时,都是使用的准备好的 Token, 保证没有过期。
实现

创建一个后台服务 BackgroundService,然后在其 ExecuteAsync 方法中创建一个定时器 PeriodicTimer,定时刷新 Token:
public class RefreshTokenService : BackgroundService, IDisposable
{
    private readonly ITokenManager tokenManager;

    public RefreshTokenService(ITokenManager tokenManager)
    {
        this.tokenManager = tokenManager;
    }

    protected async override Task ExecuteAsync(CancellationToken stoppingToken)
    {
         tokenManager.Token = await GetToken();

        //30 分钟刷新一次
        var timer = new PeriodicTimer(TimeSpan.FromMinutes(30));

        while (await timer.WaitForNextTickAsync(stoppingToken))
        {
            tokenManager.Token = await GetToken();
        }
    }

    private async Task<string>  GetToken()
    {
        //调用第三方服务获取Token
    }
}
接口ITokenManager定义如下,用于存储 Token:
public interface ITokenManager
{
    string Token { get; set; }
}
最后,我们在启动时进行依赖注入:
builder.Services.AddSingleton<ITokenManager,TokenManager>();

builder.Services.AddHostedService<RefreshTokenService>();
结论

现在,任何注入ITokenManager的类,都能始终获得有效的 Token 了。
原文链接:ASP.NET Core 定时刷新第三方 Token
回复

使用道具 举报

1

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 4 天前 | 显示全部楼层
小白一个 顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表