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

前言

在《ASP.NET Core 自动刷新JWT Token》中我们实现了为客户端自动提供最新的Token。

但是,当我们的 ASP.NET Core 应用需要调用第三方 API 时,如何更优雅地刷新第三方提供的 Token 呢?

思路

我们可以在启动时就获取第三方提供的 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 了。

添加微信号【MyIO666】,邀你加入技术交流群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode 插件开发实例(WebView):微信读书 ^-^边撸代码边看小说^-^

最终效果 主要代码 package.json {"name": "WeReadForVSCodeJackieZheng","repository": {"type": "git","url": "https://github.com/JackieZheng/WeReadForVSCode.git"},"displayName": &q…

【QGIS入门实战精品教程】4.7:QGIS如何将矢量数据转为GeoJSON格式?

本文以案例的形式,讲述在QGIS专业软件中,将矢量数据转为GeoJSON的方法。 扩展阅读: 【ArcGIS风暴】如何将矢量数据(点、线、面)折点坐标转为GeoJSON格式? 在QGIS中,可以直接将数据导出为GeoJSON格式。具体操作方法是:右键矢量数据图层→导出图层→到文件,如下图所示:…

Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...

Git的纯命令操作&#xff0c;Install&#xff0c;Clone , Commit&#xff0c;Push&#xff0c;Pull&#xff0c;版本回退&#xff0c;撤销更新&#xff0c;分支的创建/切换/更新/提交/合并&#xff0c;代码冲突 这篇是接着上篇分布式版本库——Windows下Git的环境部署以及在Git…

掌握jQuery插件开发

在实际开发工作中&#xff0c;总会碰到像滚动&#xff0c;分页&#xff0c;日历等展示效果的业务需求&#xff0c;对于接触过jQuery以及熟悉jQuery使用的人来说&#xff0c;首先想到的肯定是寻找现有的jQuery插件来满足相应的展示需求。目前页面中常用的一些组件&#xff0c;都…

List 分页加载数据控制机制

分页加载是一种应用很广泛的数据展示控制机制&#xff0c;相信绝大多数开发者对于这一套机制都非常熟悉。这篇文章的主要目的结合实际的使用场景&#xff0c;对以往在开发中遇到一些概念进行梳理&#xff0c;归纳的同时加深理解&#xff0c;也希望能帮助更多刚刚接触到开发的同…

【QGIS入门实战精品教程】3.3:QGIS如何打开ArcGIS创建的文件数据库(GDB)?

在行业应用中,GIS地理空间数据往往存储在ESRI ArcGIS的文件地理数据库(File GeodataBase),因此,ArcGIS与QGIS的数据交互、共享就显得非常重要。QGIS3可以直接打开File GDB数据,并对数据进行显示、查看、处理等操作。具体的步骤如下: 相关阅读:【QGIS入门实战精品教程】3…

.NET 6 Linux 系统服务 Systemd (案例版)

.Net Core Windows 系统服务&#xff0c;之前已经写过了&#xff0c;但是&#xff0c;对于Linux的系统服务&#xff0c;却没有写过&#xff0c;主要是因为&#xff0c;大部分Linux的.Net服务都直接Docker了&#xff0c;当然&#xff0c;不排除有这种使用的&#xff0c;可能搞成…

封装一个Array 数据 绑定 html select 方法

/** * * param {} select select控件 * param {} nodes Array数据 * param {} value value绑定项 * param {} text text绑定项 * param {} prompt 选择提示信息 * returns {} */ function bindSelect(select, nodes, value, text, prompt) {select.empty();if (prom…

XmlParser和HtmlParser

经常要用的Xml和Html解决&#xff0c;实际上这个领域也有非常好的解决方案。 相对来说现在各种开源的Xml解析功能比较丰富&#xff0c;机制也比较灵活&#xff0c;但是由于他功能比较完善&#xff0c;干的事情比较多&#xff0c;所以性能方面也慢一点&#xff1b;另外&#xff…

【QGIS入门实战精品教程】3.2:QGIS如何打开ArcGIS创建的个人数据库(MDB)?

文章目录 1. 下载并安装Microsoft Access 2010数据库引擎2. 配置系统环境变量3. 打开mdb数据库【相关阅读】 【QGIS入门实战精品教程】005:QGIS如何打开ArcGIS创建的文件数据库(GDB)? 1. 下载并安装Microsoft Access 2010数据库引擎 https://www.microsoft.com/zh-cn/down…

SharedPreferences操作数据

SharedPreferences是一个简单轻量的android存储数据类。适合保存配置信息等。是以XML方式存储的。 存储数据 SharedPreferences sharedPreferencesgetSharedPreferences("test", Context.MODE_PRIVATE);sharedPreferences.edit().putString("userName",&qu…

[转]IaaS、PaaS、SaaS、CaaS、MaaS五者的区别

云计算构架图 很明显&#xff0c;这五者之间主要的区别在于第一个单词&#xff0c;而aaS都是as-a-service&#xff08;即服务&#xff09;的意思&#xff0c;这五个模式都是近年来兴起的&#xff0c;且这五者都是云计算的落地产品&#xff0c;所以我们先来了解一下云…

使用java开发简单的mis系统所需的技术

开发mis系统用到的技术 1. b/s架构&#xff1a;就broser/server&#xff0c;浏览器/服务器的说法。服务器端要运行tomcat&#xff0c;提供链接数据库服务供java代码读写数据&#xff0c;这个可以在eclipse中配置运行。浏览器则解释jsp或html格式中的标记元素&#xff0c;用于显…

聊聊 C++ 中的四种类型转换符

一&#xff1a;背景 在玩 C 的时候&#xff0c;经常会用 void* 来指向一段内存地址开端&#xff0c;然后再将其强转成尺度更小的 char* 或 int* 来丈量一段内存&#xff0c;参考如下代码&#xff1a;int main() {void* ptr malloc(sizeof(int) * 10);int* int_ptr (int*)ptr;…

【QGIS入门实战精品教程】3.1:QGIS如何连接SQL Server数据库?

文章目录 软件必备测试SQL Server服务是否启动QGIS与SQL Server建立连接软件必备 SQL Server 2008 R2QGIS 3.22.3测试SQL Server服务是否启动 打开SQL Server配置管理器,查看MSSQLSERVER服务的启动情况。

开源重量级的流程引擎或UI引擎

关注这两个方面的同学个踊跃加粉了~~同时在下面回复期望开源哪一个&#xff0c;将先开源呼声高的一个。 好吧&#xff0c;先小秀一下UI&#xff1a; 增加下面的pom依赖&#xff0c;表示此工程需要org.tinygroup.aerowindow ?12345<dependency> <groupId>org.tinyg…

阿里云网盘内测开启 填写申请表获取邀请码 附最新申请地址

日前有相关报道显示&#xff0c;阿里方面推出了一款名为“阿里云网盘”的独立App&#xff0c;并且其是由阿里云团队开发&#xff0c;定位则是为C端用户提供可靠安全的存储备份及智能相册等功能。据了解&#xff0c;目前这款APP尚未正式上线&#xff0c;暂时还在邀请制测试阶段。…

02 JRE与JDK

JRE (Java Runtime Environment) JAVA 运行环境 包括JAVA虚拟机和JAVA程序所需要的核心类库&#xff0c;如查想要运行一个开发好的JAVA程序&#xff0c;计算机只需要安装JRE即可 JDK&#xff08;JAVA Development Kit &#xff09;JAVA开发工具包 JDK是提供给JAVA开发人员使用…

第 133 章 FAQ

133.1. Haproxy 与 Nginx Haproxy 与 Nginx 都能实现负载均衡&#xff0c;那么 Haproxy 与 Nginx proxy 有什么差异&#xff0c;我们怎样选择两种方案。 如果是用于 HTTP 负载均衡我建议使用 Nginx&#xff0c;它可以SSL证书挂载&#xff0c;缓存定制&#xff0c;实现各种复杂的…

跟我做⼀个⾼德地图的 iOS / Android MAUI控件(Android 原⽣库绑定)

我们已经介绍了如何通过 .NET 绑定 iOS 原⽣库 &#xff0c;本篇开始介绍⼀下如何通过 .NET 绑定 Android 原⽣库。Android的库Android 的库以 .jar 做打包&#xff0c; 通过⼯具你可以将多个 .jar 完成绑定&#xff0c;然后通过 C# 调⽤原⽣的 Java 库。对⽐起 iOS &#xff0…