Node.js —— 前后端的身份認證 之用 express 實現 JWT 身份認證

JWT的認識

什么是 JWT

????????JWT(英文全稱:JSON Web Token)是目前最流行的跨域認證解決方案。

JWT 的工作原理

????????總結:用戶的信息通過 Token 字符串的形式,保存在客戶端瀏覽器中。服務器通過還原 Token 字符串的形式來認證用戶的身份。?

?JWT 的組成部分

????????JWT 通常由三部分組成,分別是 Header(頭部)、Payload(有效荷載)、Signature(簽名)。 三者之間使用英文的“.”分隔,格式如下:

下面是 JWT 字符串的示例:

?JWT 的三個部分各自代表的含義

????????JWT 的三個組成部分,從前到后分別是

  • Header
  • Payload
  • Signature

????????其中: ?Payload 部分才是真正的用戶信息,它是用戶信息經過加密之后生成的字符串。

?????????Header 和 Signature 是安全性相關的部分,只是為了保證 Token 的安全性。

JWT 的使用方式

????????客戶端收到服務器返回的 JWT 之后,通常會將它儲存在 localStorage 或 sessionStorage 中。

???????? 此后,客戶端每次與服務器通信,都要帶上這個 JWT 的字符串,從而進行身份認證。推薦的做法是把 JWT 放在 HTTP 請求頭的 Authorization 字段中,格式如下:?

在 Express 中使用 JWT

1.安裝 JWT 相關的包

????????運行如下命令,安裝如下兩個 JWT 相關的包:

?其中:

  • jsonwebtoken 用于生成 JWT 字符串
  • express-jwt 用于將 JWT 字符串解析還原成 JSON 對象

2. 導入 JWT 相關的包

使用 require() 函數,分別導入 JWT 相關的兩個包:

3. 定義 secret 密鑰

????????為了保證 JWT 字符串的安全性,防止 JWT 字符串在網絡傳輸過程中被別人破解,我們需要專門定義一個用于加密和解密的 secret 密鑰:

  • 當生成 JWT 字符串的時候,需要使用 secret 密鑰對用戶的信息進行加密,最終得到加密好的 JWT 字符串
  • 當把 JWT 字符串解析還原成 JSON 對象的時候,需要使用 secret 密鑰進行解密?

4. 在登錄成功后生成 JWT 字符串

調用 jsonwebtoken 包提供的 sign() 方法,將用戶的信息加密成 JWT 字符串,響應給客戶端:

?5. 將 JWT 字符串還原為 JSON 對象

????????客戶端每次在訪問那些有權限接口的時候,都需要主動通過請求頭中的 Authorization 字段,將 Token 字符串發送到服務器進行身份認證。 此時,服務器可以通過 express-jwt 這個中間件,自動將客戶端發送過來的 Token 解析還原成 JSON 對象:

6. 使用 req.user 獲取用戶信息

????????當 express-jwt 這個中間件配置成功之后,即可在那些有權限的接口中,使用 req.user 對象,來訪問從 JWT 字符串中解析出來的用戶信息了,示例代碼如下:

?

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

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

相關文章

AIGC-風格遷移-“DEADiff:穩定可控的文本到圖像風格化擴散模型 “-CVPR2024

DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 代碼:https://tianhao-qi.github.io/DEADiff/ 論文:https://arxiv.org/pdf/2403.06951 本文介紹了一種名為DEADiff的方法,旨在解決基于擴散的文本到圖…

【機器學習論文閱讀筆記】Robust Recovery of Subspace Structures by Low-Rank Representation

前言 終于要輪到自己匯報了好崩潰。。盯著論文準備開始做匯報ppt感覺一頭亂麻,決定還是寫博客理清思路再說吧 參考資料: 論文原文:arxiv.org/pdf/1010.2955 RPCA參考文章:RPCA - 知乎 (zhihu.com) 譜聚類參考文章&#xff1a…

Python使用pymysql操作數據庫

大家好,當涉及到與數據庫進行交互和操作時,Python的pymysql庫是一個常用且功能強大的選擇。pymysql提供了與MySQL數據庫的連接、查詢、插入、更新和刪除等操作的方法,使得在Python中進行數據庫操作變得簡單而高效。 1、安裝 pymysql 庫 在開…

面部捕捉 學習筆記

目錄 FaceShift Studio FaceRig Pro是一款功能強大的面部捕捉視頻制作軟件版 FaceShift Studio FaceShift人臉表情識別原理分析 - 知乎 FaceRig Pro是一款功能強大的面部捕捉視頻制作軟件版

Python3 筆記:部分專有名詞解釋

1、python 英 /?pa?θ?n/ 這個詞在英文中的意思是蟒蛇。但據說Python的創始人Guido van Rossum(吉多范羅蘇姆)選擇Python這個名字的原因與蟒蛇毫無關系,只是因為他是“蒙提派森飛行馬戲團(Monty Python's Flying Ci…

【靜態分析】在springboot使用太阿(Tai-e)01

參考:使用太阿(Tai-e)進行靜態代碼安全分析(spring-boot篇一) - 先知社區 ---------------------------------------------------------------------- 由于spring-boot實現了控制反轉與面向切面編程的設計思想&#x…

OpenHarmony輕松玩轉GIF數據渲染

OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)提供了Image組件支持GIF動圖的播放,但是缺乏擴展能力,不支持播放控制等。今天介紹一款三方庫——ohos-gif-drawable三方組件,帶大家一起玩轉GIF的數據渲染,搞…

如何在JS中克隆對象

在JavaScript中,克隆對象并不是直接支持的操作,因為JavaScript中的對象是通過引用傳遞的,而不是通過值傳遞。但是,你可以使用幾種不同的方法來"克隆"或"復制"一個對象。 1. 淺拷貝(Shallow Copy&…

二手車經營效率羅盤,用經營效率羅盤玩轉二手車生意

課程下載:https://download.csdn.net/download/m0_66047725/89292198 更多資源下載:關注我。 帶你了解不一樣的二手車圈讓二手車經營更高效 課程介紹 隨著時代不斷發展,二手車行業迎來了快速變革期。二手車有著一車一況、一車一價非標和價…

無人機+飛行服務:無人機飛防服務(打藥+施肥+播種)技術詳解

無人機飛防服務,結合了先進的無人機技術與農業實踐,為現代農業提供了高效、精準的打藥、施肥和播種解決方案。以下是對這些技術的詳細解析: 一、無人機打藥技術 無人機打藥技術利用無人機搭載噴霧設備,對農田進行精準施藥。通過…

【數倉系列】maxcompute、postgresql、sparksql等行轉列數據處理實戰總結(其他類型持續總結更新)

1.熟悉、梳理、總結項目研發實戰中的SQL開發日常使用中的問題、經驗總結,都是常用的開發技能,可以省去很多時間,時間長就忘記了 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來! 文章目錄 1.maxcompu…

關于java.nio.file 包--用于文件和文件系統操作的核心包之一

java.nio.file 包是 Java 中用于文件和文件系統操作的核心包之一。這個包提供了許多類和接口,用于在 Java 虛擬機中訪問文件、管理文件屬性和操作文件系統。主要的功能包括: 1.訪問文件和目錄: java.nio.file.Files 類提供了許多靜態方法,用于…

【Crypto】看我回旋踢

文章目錄 一、看我回旋踢二、知識點什么是ROT13?工作原理分析字符串格式 解題感悟 一、看我回旋踢 關鍵詞回旋,盲猜ROT13 因為以 synt{ 開頭,并以 } 結束,基本可以判斷是ROT13 小小flag,拿下! 二、知識點 …

抖音極速版:抖音輕量精簡版本,新人享大福利

和快手一樣,抖音也有自己的極速版,可視作抖音的輕量精簡版,更專注于刷視頻看廣告賺錢,收益比抖音要高,可玩性更佳。 抖音極速版簡介 抖音極速版是一個提供短視頻創業和收益任務的平臺,用戶可以通過觀看廣…

leetcode-560 和為k的數組

一、題目描述 給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 注意:nums中的元素可為負數 輸入:nums [1,1,1], k 2 輸出:2輸入:num…

裝飾乙級資質延期申請的注意事項

在申請裝飾乙級資質延期時,企業需要注意以下幾個重要事項: 提前了解政策和要求: 企業應提前了解并熟悉資質延期的相關政策和要求,包括所需材料、辦理流程、時間限制等。這有助于企業做好充分準備,避免在申請過程中出現…

【機器學習聚類算法實戰-5】機器學習聚類算法之DBSCAN聚類、K均值聚類算法、分層聚類和不同度量的聚集聚類實例分析

🎩 歡迎來到技術探索的奇幻世界👨?💻 📜 個人主頁:一倫明悅-CSDN博客 ?🏻 作者簡介: C軟件開發、Python機器學習愛好者 🗣? 互動與支持:💬評論 &…

MYSQL課堂練習

學生表:studentsno,sname,ssex,sage,sdept)學號,姓名,性別,年齡,所在系 sno為主鍵課程表:Course(cno,cname,) 課程號,課程名 cno為主鍵 學生選課…

申報照明工程設計乙級資質關于財務審計報告的要求

申報照明工程設計乙級資質時,關于財務審計報告的要求通常包括以下幾點: 審計報告類型:需要提供由具有法定資質的會計師事務所出具的財務審計報告。如果是企業已經運營滿一個會計年度,應提交最近一個完整會計年度的年度審計報告。如…

Rust:struct 與字節序列的相互轉換

在 Rust 中&#xff0c;將結構體&#xff08;struct&#xff09;與字節序列&#xff08;Vec<u8>&#xff09;相互轉換的常見方法是使用序列化和反序列化庫。Rust 有一個流行的序列化庫叫做 serde&#xff0c;它支持多種數據格式。為了將結構體轉換為字節序列&#xff0c;…