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.pswp.cn/news/284813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284813.shtml
英文地址,請注明出處:http://en.pswp.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…