[筆記] JSON Web Token (JWT)

閱讀時間約 5 分鐘

最近因為想要花些時間做完一個完整的SideProject,以前總是懂得怎麼使用,拼拼湊湊完成一個塞趴卷就交卷了,但都沒時間去真正理解這些原理的應用,而Laravel 框架本身支持的登入登出的工具,就有好多種。

例如:  BreezePassport 、  Socialite 、 SanctumFortifyJetstream

而之前跟著線上課程學習到都是使用 Passport 套件,跟著官方文件套用並實現會員系統,或是無腦安裝 Breeze 但仔細研究後,Passport 可用於實現 OAuth 2.0 和 JWT 身份驗證,其支持各種 OAuth 2.0 授權,並有內置的用戶身份驗證和令牌管理機制,但如果只需要一種輕量級的身份驗證機制,例如在前端和後端之間驗證用戶身份,或在不同的微服務之間進行身份驗證和授權,那其實單純選擇JWT會更方便些,下列就針對JWT學習理解作筆記。

簡單說明何為JWT?

JWT (JSON Web Token) 是一種開放標準(RFC 7519),用於在不同實體之間安全地傳遞信息的輕量級標準。它使用簽名(或加密)來確保數據的完整性和安全性。

而它的設計因為不需要使用傳統身份驗證方法(使用Cookie或Session),而是在客戶端登入後請求時,帶上資料請求伺服器驗證,驗證完成後會給予Token回傳給客戶端,而之後客戶端發出任何請求時都會帶上這段Token 給伺服器端驗證往後執行,整個流程大致如下圖(簡單用Hackmd畫一下XD)

raw-image

JWT結構

JWT 由三部分組成,它們都是基於Base64編碼的字符串,並使用點(.)來分隔:

  1. Header:描述令牌的元信息,通常包括令牌的類型(JWT)和所使用的簽名算法。
  2. Payload:包含有關令牌的信息,例如用戶ID、角色等。這部分是可讀的,但不應包含敏感信息
  3. Signature:用於驗證令牌的完整性和真實性的數字簽名。通常使用一個密鑰來生成簽名。

而在 JSON Web Tokens (JWT) 中,簽名(Signature)是用於確保令牌完整性和真實性的重要部分。簽名通常使用密鑰進行生成和驗證,並且可以使用不同的加密算法。以下是一些常見的簽名加密算法:

  1. HMAC(基於散列的消息驗證碼)
    • HMAC SHA-256(HMAC-SHA256):這是一種使用 SHA-256 散列函數的 HMAC 簽名算法。它是 JWT 中最常見的簽名算法之一。
  2. RSA(Rivest–Shamir–Adleman)
    • RSA 簽名算法使用非對稱密鑰對來生成和驗證簽名。在 JWT 中,用於生成簽名的是私鑰,而用於驗證簽名的是公鑰。
    • 常見的 RSA 簽名算法包括 RS256、RS384 和 RS512,分別使用不同的散列函數(SHA-256、SHA-384 和 SHA-512)。
  3. ECDSA(橢圓曲線數位簽名算法)
    • ECDSA 是一種基於橢圓曲線密碼學的簽名算法,類似於 RSA。它使用非對稱密鑰對來生成和驗證簽名。
    • 常見的 ECDSA 簽名算法包括 ES256、ES384 和 ES512,分別使用不同的橢圓曲線和散列函數。

最後組成結果就會變成下列這個合法簽發的JWT字串。

base64(Header) + base64(Payload) + base64(Signature)


而透過JWT官網:https://jwt.io/,可以用來解析JWT字串decode結果。

使用JWT優缺點

  1. JWT 包含了所有必要的信息,包括用戶ID、角色、到期時間等,因此減少了對伺服器的請求次數,提高了效率。
  2. 由於JWT是JSON object的形式,故大部分的程式語言皆支援,可以在不同的語言和平台之間輕松使用和解析。
  3. 當使用適當的加密算法和密鑰管理實踐時,JWT 可以提供良好的安全性,確保令牌的完整性和真實性。
  4. JWT 可以包含自定義的聲明(Claims),這允許您在令牌中添加應用程序特定的信息。這提供了擴展性,以滿足特定應用程序需求。

缺點:

  1. 一旦 JWT 被簽發,除非到期時間到期,否則無法撤銷。這對於某些安全需求較高的應用程序可能是一個問題。
  2. JWT 的有效載荷(Payload)包含了用戶信息,因此可能會變得相對較大。如果用戶信息很多,令牌可能會變得非常大,這可能會增加傳輸成本。
  3. 保護 JWT 的安全性依賴於密鑰的安全管理。如果密鑰泄露或不慎遺失,則可能導致令牌被濫用。

總結:JWT 是實現單點登錄的有效工具,它提供了一種安全且可擴展的方式,允許用戶在多個應用程序之間無縫訪問,而不需要在每個應用程序中重新登錄,故很多跨網域的 SSO(Single Sign-On) 實作就會使用 JWT 這樣的機制,也避免了 session 所造成的問題。

下一章就要來使用 firebase/php-jwt 套件來進行實作會員登入登出功能


可以參考五倍紅寶石的JWT文章會有更詳細的說明

https://5xruby.tw/posts/what-is-jwt

文章同步發佈potato media平台

https://www.potatomedia.co/post/504ee23d-ab10-47d9-8b7d-a9dc84cc9c70






avatar-img
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。
最近在研讀單元測試的藝術這本書,也剛好因為自己對單元測試的撰寫還沒有很游刃有餘XD,但由於我是挑重點看,簡單做個內容讀後感的整理
接續上一章Laravel Request 的概念簡單說明,接下來講 Request 特別的應用,而分享這部分的契機,主要是在新人時期面試時被問到的一題,不知道大家是否有被考過這題? 通常考官的問題:解釋一下關於Laravel 隱式綁定 or 是否聽過隱式綁定?
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。
最近在研讀單元測試的藝術這本書,也剛好因為自己對單元測試的撰寫還沒有很游刃有餘XD,但由於我是挑重點看,簡單做個內容讀後感的整理
接續上一章Laravel Request 的概念簡單說明,接下來講 Request 特別的應用,而分享這部分的契機,主要是在新人時期面試時被問到的一題,不知道大家是否有被考過這題? 通常考官的問題:解釋一下關於Laravel 隱式綁定 or 是否聽過隱式綁定?
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
你可能也想看
Google News 追蹤
這篇文章將介紹兩個主要的認證工具:Passport 和 JWT。Passport 是一個簡單的身份驗證中介軟體,提供多種登入方式,而JWT則是一種stateless的認證方式,能減輕伺服器負擔。文章探討了 stateful 與 stateless 認證的區別,以及如何將這兩者結合提升安全性與效能。
Token Extension Standard 是 Solana 區塊鏈上的一個代幣標準, 基於原始的 SPL(Solana Program Library)代幣標準進行構建。 具有增強的安全性和功能、改進的代幣處理能力, 如多重簽名和時間鎖定、設計 用於支持更複雜的代幣操作和使用案例
探索区块链技术在身份认证中的创新应用,了解如何将其应用于加密货币市场,提高安全性和效率。 引言 在当前加密货币市场中,身份认证是最大的挑战之一。区块链技术的出现,带来了身份认证的创新解决方案。今天,我们将探索区块链在身份认证中的创新应用,了解如何将其应用于加密货币市场,提高安全性和效率。 什
了解智能合约在去中心化身份认证中的群签名方案设计,如何实现安全、可靠的身份验证?本文将深入探讨智能合约技术在身份认证领域的应用和前景。 引言 智能合约技术的兴起为去中心化身份认证提供了新的解决方案。其中,群签名方案设计是智能合约在身份认证领域的重要应用之一。随着加密货币市场的发展,身份认证的安
Thumbnail
上一篇提到要在Solana上鑄造新的token需要使用到token program,功能較為陽春。隨著各種新需求的增加同時兼顧安全性的目的,一個新的token program - token 2022 (另名token extension)被開發出來,發佈在一個新的地址上。 Token 2022在
在今日數位化的世界中,保護資料的安全性尤為重要。加密憑證(SSL/TLS Certificates)扮演著確保網站和用戶之間資料傳輸安全的重要角色。本文將深入探討加密憑證的原理、作用以及如何選擇適合的加密憑證來保護您的網站。 1. 加密憑證的基本概念 加密憑證是一種數位檔案,用於證明網站身份的真
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
進入區塊鏈/Web3的世界,首先需要擁有一個錢包或帳號。本文從重要名詞和觀念入手,介紹公鑰和私鑰的重要性,以及助記詞的作用。探討加密錢包的種類,從私鑰控制權和網路連接的角度進行分類。同時提醒了私鑰保管的重要性,以及在交易所和網路交互中的安全提醒。最後透過實際案例介紹了社交工程和釣魚的危害。
SHA-256簡介 SHA-2,名稱來自於安全雜湊演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼雜湊函數演算法標準,由美國國家安全局研發,由美國國家標準與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
這篇文章將介紹兩個主要的認證工具:Passport 和 JWT。Passport 是一個簡單的身份驗證中介軟體,提供多種登入方式,而JWT則是一種stateless的認證方式,能減輕伺服器負擔。文章探討了 stateful 與 stateless 認證的區別,以及如何將這兩者結合提升安全性與效能。
Token Extension Standard 是 Solana 區塊鏈上的一個代幣標準, 基於原始的 SPL(Solana Program Library)代幣標準進行構建。 具有增強的安全性和功能、改進的代幣處理能力, 如多重簽名和時間鎖定、設計 用於支持更複雜的代幣操作和使用案例
探索区块链技术在身份认证中的创新应用,了解如何将其应用于加密货币市场,提高安全性和效率。 引言 在当前加密货币市场中,身份认证是最大的挑战之一。区块链技术的出现,带来了身份认证的创新解决方案。今天,我们将探索区块链在身份认证中的创新应用,了解如何将其应用于加密货币市场,提高安全性和效率。 什
了解智能合约在去中心化身份认证中的群签名方案设计,如何实现安全、可靠的身份验证?本文将深入探讨智能合约技术在身份认证领域的应用和前景。 引言 智能合约技术的兴起为去中心化身份认证提供了新的解决方案。其中,群签名方案设计是智能合约在身份认证领域的重要应用之一。随着加密货币市场的发展,身份认证的安
Thumbnail
上一篇提到要在Solana上鑄造新的token需要使用到token program,功能較為陽春。隨著各種新需求的增加同時兼顧安全性的目的,一個新的token program - token 2022 (另名token extension)被開發出來,發佈在一個新的地址上。 Token 2022在
在今日數位化的世界中,保護資料的安全性尤為重要。加密憑證(SSL/TLS Certificates)扮演著確保網站和用戶之間資料傳輸安全的重要角色。本文將深入探討加密憑證的原理、作用以及如何選擇適合的加密憑證來保護您的網站。 1. 加密憑證的基本概念 加密憑證是一種數位檔案,用於證明網站身份的真
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
進入區塊鏈/Web3的世界,首先需要擁有一個錢包或帳號。本文從重要名詞和觀念入手,介紹公鑰和私鑰的重要性,以及助記詞的作用。探討加密錢包的種類,從私鑰控制權和網路連接的角度進行分類。同時提醒了私鑰保管的重要性,以及在交易所和網路交互中的安全提醒。最後透過實際案例介紹了社交工程和釣魚的危害。
SHA-256簡介 SHA-2,名稱來自於安全雜湊演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼雜湊函數演算法標準,由美國國家安全局研發,由美國國家標準與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊