JWT的介紹與在Fastapi框架中的應用

什么是JWT

JWT (JSON Web Token) 是一個開放標準 ( RFC 7519 ),它定義了一種緊湊且自包含的方式,用于在各方之間安全地以 JSON 對象的形式傳輸信息。由于這些信息經過數字簽名,因此可以被驗證和信任。JWT 可以使用密鑰(采用HMAC算法)或使用RSA或ECDSA 的公鑰/私鑰對進行簽名。

雖然 JWT 可以通過加密來保障各方之間的隱私,但我們將重點介紹簽名令牌。簽名令牌可以驗證其所含聲明的完整性,而加密令牌則會向其他方隱藏這些聲明。使用公鑰/私鑰對對令牌進行簽名時,簽名還能證明只有持有私鑰的一方才是簽名者。

JWT應用場景

以下是 JSON Web Tokens 有用的一些場景:

  • 授權:這是使用 JWT 最常見的場景。用戶登錄后,每個后續請求都將包含 JWT,允許用戶訪問該令牌允許的路由、服務和資源。單點登錄是如今 JWT 廣泛使用的一項功能,因為它開銷小,并且易于跨域使用。

  • 信息交換:JSON Web Token 是各方之間安全傳輸信息的有效方式。由于 JWT 可以簽名(例如,使用公鑰/私鑰對),因此您可以確保發送者的身份與其聲明相符。此外,由于簽名是使用標頭和有效負載計算得出的,因此您還可以驗證內容未被篡改。

JSON Web Token 結構是什么?

JSON Web Token由以下三部分組成,中間用點連接:

  • 標題
  • 有效載荷
  • 簽名

標題

標頭通常由兩部分組成:令牌的類型(即 JWT)和正在使用的簽名算法(例如 HMAC SHA256 或 RSA)。

例如:

{"alg": "HS256","typ": "JWT"
}

然后,將此 JSON 經過Base64Url編碼,形成 JWT 的第一部分。

有效載荷

令牌的第二部分是有效負載,其中包含聲明。聲明是關于實體(通常是用戶)及其附加數據的聲明。聲明分為三種類型:已注冊聲明、公共聲明和私有聲明。

聲明:這些是一組預定義的聲明,雖然不是強制性的,但建議使用,以提供一組有用且可互操作的聲明。其中包括: iss(頒發者)、 exp(到期時間)、 sub(主題)、 aud(受眾)等。

請注意,由于 JWT 要求緊湊,因此聲明名稱只有三個字符。

有效載荷示例如下:

{"sub": "1234567890","name": "John Doe","admin": true
}

然后對有效負載進行Base64Url編碼以形成 JSON Web Token 的第二部分。

請注意,對于簽名令牌,這些信息雖然受到保護以防止篡改,但任何人都可以讀取。除非已加密,否則請勿將機密信息放入 JWT 的有效負載或標頭元素中。

簽名

要創建簽名部分,您必須獲取編碼的標頭、編碼的有效負載、秘密、標頭中指定的算法,然后對其進行簽名。

例如,如果您想使用 HMAC SHA256 算法,則簽名將以以下方式創建:

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)

簽名用于驗證消息在傳輸過程中未被更改,并且,在使用私鑰簽名的令牌的情況下,它還可以驗證 JWT 的發送者是否是其聲稱的那個人。

整合

輸出是三個由點分隔的 Base64-URL 字符串,可以在 HTML 和 HTTP 環境中輕松傳遞,同時與基于 XML 的標準(如 SAML)相比更加緊湊。

下面顯示了一個對前面的標頭和有效負載進行了編碼的 JWT,并且使用密鑰進行了簽名。 編碼的 JWT

如果您想使用 JWT 并將這些概念付諸實踐,可以使用jwt.io Debugger來解碼、驗證和生成 JWT。

JWT.io 調試器

JSON Web Tokens 如何工作?

在身份驗證中,當用戶使用其憑證成功登錄時,將返回一個 JSON Web Token。由于 token 是憑證,因此必須格外小心,以防止出現安全問題。通常情況下,不應將 token 保留超過規定時間。并且由于缺乏安全性,也不應將敏感的會話數據存儲在瀏覽器存儲中。

每當用戶想要訪問受保護的路由或資源時,用戶代理都應該發送 JWT,通常在請求頭的Authorization標頭中使用Bearer模式。標頭內容應如下所示:

Authorization: Bearer <token>

下圖展示了如何獲取 JWT 以及如何使用它來訪問 API 或資源:
JWT工作流程

  1. 應用程序或客戶端向授權服務器請求授權。
  2. 當授權被授予時,授權服務器會向應用程序返回訪問令牌。
  3. 應用程序使用訪問令牌來訪問受保護的資源(如 API)。

未完待續。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82720.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dfs第二次加訓 詳細題解 下

目錄 B4158 [BCSP-X 2024 12 月小學高年級組] 質數補全 思路 B4279 [藍橋杯青少年組國賽 2023] 數獨填數、 思路 P5198 [USACO19JAN] Icy Perimeter S 思路 P5429 [USACO19OPEN] Fence Planning S 思路 P6111 [USACO18JAN] MooTube S 思路 P6207 [USACO06OCT] Cows …

配置Hadoop集群環境準備

&#xff08;一&#xff09;Hadoop的運行模式 一共有三種&#xff1a; 本地運行。偽分布式完全分布式 &#xff08;二&#xff09;Hadoop的完全分布式運行 要模擬這個功能&#xff0c;我們需要做好如下的準備。 1&#xff09;準備3臺客戶機&#xff08;關閉防火墻、靜態IP、…

Python60日基礎學習打卡D12【蟲豸版】

退火算法 物理現象&#xff1a;退火現象指物體逐漸降溫的物理現象&#xff0c;溫度愈低&#xff0c;物體的能量狀態會低&#xff1b;溫度足夠低后&#xff0c;液體開始冷凝與結晶&#xff0c;在結晶狀態時&#xff0c;系統的能量狀態最低。大自然在緩慢降溫(即退火)時&#xf…

1.3.1 Linux音頻框架alsa詳細介紹

ALSA作為對舊OSS系統的替代方案&#xff0c;始于1998年。當時OSS還閉源商業化&#xff0c;因此社區開始開發開源的ALSA。經過多年的發展&#xff0c;ALSA成為Linux內核中音頻架構的標準。 結構和架構 ALSA由以下幾個主要部分組成&#xff1a; 內核模塊&#xff1a; 這是ALSA的…

# 07_Elastic Stack 從入門到實踐(七)---1

07_Elastic Stack 從入門到實踐(七)—1 一、Filebeat入門之讀取 Nginx 日志文件 1、首先啟動 Elasticsearch 集群 和 Nginx 服務,打開GoogleChrome 瀏覽器,點擊 elasticsearch-head 插件,連接Elasticsearch 集群 服務器。 # 查看網卡名 $ ip addr# 修改網卡配置,改為…

BUUCTF 大流量分析(三) 1

BUUCTF:https://buuoj.cn/challenges 文章目錄 題目描述&#xff1a;密文&#xff1a;解題思路&#xff1a;flag&#xff1a; 相關閱讀 CTF Wiki BUUCTF | 大流量分析 &#xff08;一&#xff09;&#xff08;二&#xff09;&#xff08;三&#xff09; 題目描述&#xff1a; …

數據庫的進階操作

目錄 1、數據庫的約束 2、查詢操作的進階 2.1 查詢插入 2.2 聚合查詢 2.3 運算查詢 2.3 分組查詢 2.4 聯合查詢 2.5 內外連接 2.6 子查詢 2.7 合并查詢 1、數據庫的約束 數據庫的約束是指&#xff1a;數據庫會自動的對數據的合法性進行校驗和檢查的一系列操作的機制&a…

.Net HttpClient 使用請求數據

HttpClient 使用請求數據 0、初始化及全局設置 //初始化&#xff1a;必須先執行一次 #!import ./ini.ipynb1、使用url 傳參 參數放在Url里&#xff0c;形如&#xff1a;http://www.baidu.com?namezhangsan&age18, GET、Head請求用的比較多。優點是簡單、方便&#xff0…

Qt還有希望嗎

&#x1f680;2025 年 Qt 框架價值大揭秘&#xff01;會持續閃耀嗎&#xff1f; 寶子們&#xff0c;今天來聊聊 Qt 框架在 2025 年的價值走向&#xff0c;這可是跨平臺應用開發的寶藏工具呀&#xff01; &#x1f31f;核心優勢穩穩拿捏Qt 的跨平臺能力絕了&#xff01; Windows…

Redis設計與實現——數據結構與對象

簡單動態字符串&#xff08;SDS&#xff09; SDS 的結構定義 len&#xff1a;記錄當前字符串的實際長度&#xff08;不包含 \0&#xff09;&#xff0c;獲取長度的時間復雜度為 O(1)。free&#xff1a;記錄未使用的空間大小&#xff0c;用于優化內存分配。buf[]&#xff1a;實…

NeurIPS 2025 截稿攻略

會議資訊 NeurIPS&#xff0c;全稱神經信息處理系統大會&#xff0c;是一個關于機器學習和計算神經科學的國際會議。NeurIPS是CCF&#xff08;計算機學會&#xff09;推薦的A類會議&#xff01;是機器學習領域內最具難度、水平最高且影響力最強的會議之一。它與ICML&#xff0…

Java中堆棧

文章目錄 Java中堆棧1. 棧&#xff08;Stack&#xff09;特點示例 2. 堆&#xff08;Heap&#xff09;特點示例 3. 核心區別4. 常見問題5. 內存可視化示例內存布局示意圖&#xff1a; 總結 Java中堆棧 在 Java 中&#xff0c;“堆棧” 通常指的是堆&#xff08;Heap&#xff0…

【類拷貝文件的運用】

常用示例 當我們面臨將文本文件分成最大大小塊的時&#xff0c;我們可能會嘗試編寫如下代碼: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默認10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…

打破產品思維--被討厭的勇氣--實戰5

課程&#xff1a;B站大學 記錄產品經理實戰項目系統性學習&#xff0c;從產品思維&#xff0c;用戶畫像&#xff0c;用戶體驗&#xff0c;增長數據驅動等不同方向理解產品&#xff0c;從0到1去理解產品從需求到落地的全過程&#xff0c;測試左移方向&#xff08;靠近需求、設計…

【Autosar SecOC 1.信息安全原理介紹】

這里寫目錄標題 1 背景2 了解黑客攻擊原理3 SecOC實現數據的真實性與完整性校驗3.1 數據身份驗證完成真實性驗證3.2 防止重放攻擊 1 背景 在今天的車載網絡中&#xff0c;大部分數據傳輸是在沒有任何特殊安全措施的情況下進行的。因此&#xff0c;一旦能夠直接訪問車輛的總線&a…

基于SpringBoot的校園周邊美食探索及分享平臺【附源碼+數據庫+文檔下載】

一、項目簡介 本項目是一個基于 SpringBoot Vue 的校園周邊美食探索與分享平臺&#xff0c;專為在校大學生開發&#xff0c;集美食推薦、好友互動、收藏分享于一體。 通過平臺&#xff0c;用戶可以探索學校周邊的美食店鋪、發布美食鑒賞、添加好友進行交流分享。同時&#x…

無償幫寫畢業論文

以下教程教你如何利用相關網站和AI免費幫你寫一個畢業論文。畢竟畢業論文只要過就行&#xff0c;脫產學習這么多年&#xff0c;終于熬出頭了&#xff0c;完成畢設后有空就去多看看親人好友&#xff0c;祝好&#xff01; 一、找一個論文模板(最好是overleaf) 廢話不多說&#…

15 個 Azure DevOps 場景化面試問題及解答

問題 1. 解釋 Azure DevOps YAML 管道的典型結構。 您可以從管道的整體結構開始&#xff0c;從觸發器開始。您也可以選擇解釋它可能包含的不同類型的階段&#xff1a;構建、測試、掃描、部署等。 Azure DevOps YAML 管道結構示例 觸發器指示管道運行。它可以是持續集成 (CI) 或…

Java 大視界 -- Java 大數據機器學習模型在元宇宙虛擬場景智能交互中的關鍵技術(239)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

本地不安裝oracle,還想連oracle

1.首先要用navicat,或者toad打開連接數據庫 2.安裝oracle客戶端&#xff0c;有時候OCI.dll需要看數據庫版本&#xff0c;我們Oracle數據庫是12C&#xff0c;可以用這個版本 3. 4.配置環境變量 變量名&#xff1a;NLS_LANG變量值&#xff1a;SIMPLIFIED CHINESE_CHINA.ZHS16GBK …