[筆記] 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
留言分享你的想法!
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
上一篇筆記講到了瀏覽器與伺服器之間,經過身分驗證後,就會改以 Token 這個令牌作為通行證,不需要再反覆驗證,那麼這篇紀錄的就是目前最常使用的 JWT (JSON Web Token) 啦! 可以搭配 JWT 的網站來玩看看 JWT(JSON Web Token) 顧名思義就是以 JSON
Thumbnail
上一篇筆記講到了瀏覽器與伺服器之間,經過身分驗證後,就會改以 Token 這個令牌作為通行證,不需要再反覆驗證,那麼這篇紀錄的就是目前最常使用的 JWT (JSON Web Token) 啦! 可以搭配 JWT 的網站來玩看看 JWT(JSON Web Token) 顧名思義就是以 JSON
Thumbnail
首先先簡單說明 Laravel 中的 Middleware (中介層),Middleware 是一種用於處理 HTTP 請求的機制,它允許你在請求到達應用程序的路由之前或之後執行一些代碼。Middleware 通常用於執行諸如驗證、授權、日誌記錄、修改請求/響應等操作。
Thumbnail
首先先簡單說明 Laravel 中的 Middleware (中介層),Middleware 是一種用於處理 HTTP 請求的機制,它允許你在請求到達應用程序的路由之前或之後執行一些代碼。Middleware 通常用於執行諸如驗證、授權、日誌記錄、修改請求/響應等操作。
Thumbnail
角色基於的訪問控制(RBAC)是管理用戶訪問資源的一種策略,根據不同的角色賦予用戶不同的權限。在本篇文章中,我們將探討如何使用Gin和JSON Web Tokens (JWT)來實現RBAC。
Thumbnail
角色基於的訪問控制(RBAC)是管理用戶訪問資源的一種策略,根據不同的角色賦予用戶不同的權限。在本篇文章中,我們將探討如何使用Gin和JSON Web Tokens (JWT)來實現RBAC。
Thumbnail
最近因為想要花些時間做完一個完整的SideProject,以前總是懂得怎麼使用,拼拼湊湊完成一個塞趴卷就交卷了,但都沒時間去真正理解這些原理的應用,而Laravel 框架本身支持的登入登出的工具,就有好多種。
Thumbnail
最近因為想要花些時間做完一個完整的SideProject,以前總是懂得怎麼使用,拼拼湊湊完成一個塞趴卷就交卷了,但都沒時間去真正理解這些原理的應用,而Laravel 框架本身支持的登入登出的工具,就有好多種。
Thumbnail
哈囉!在今天的文章中,我們將深入探討如何在 Gin 應用中實現 JWT 驗證。這種技術允許我們安全地驗證和授權用戶,並確保我們的 API 或 Web 應用的資源僅被許可的用戶訪問。
Thumbnail
哈囉!在今天的文章中,我們將深入探討如何在 Gin 應用中實現 JWT 驗證。這種技術允許我們安全地驗證和授權用戶,並確保我們的 API 或 Web 應用的資源僅被許可的用戶訪問。
Thumbnail
session & token 驗證機制早期是用 session,server 這裡會發一個 session 給 client,並在資料庫記錄這個 session 屬於誰,而且每個裝置都會記一組 session,這會造成 server 這邊需要記錄大量的資料。 後來發展出 token,client
Thumbnail
session & token 驗證機制早期是用 session,server 這裡會發一個 session 給 client,並在資料庫記錄這個 session 屬於誰,而且每個裝置都會記一組 session,這會造成 server 這邊需要記錄大量的資料。 後來發展出 token,client
Thumbnail
本筆記遵循官方文件教學,經過一些小修改,經測試可以跑在Laravel Framework version: 8.13.0,將筆記記錄下來。 ......
Thumbnail
本筆記遵循官方文件教學,經過一些小修改,經測試可以跑在Laravel Framework version: 8.13.0,將筆記記錄下來。 ......
Thumbnail
JWT全名JSON Web Token,因符合RESTful API無狀態原則而誕生。 傳統我們通常會用cookie/session的方式來做身分認證,也就是user登入後,用session id當作一種token,來做身份認證。 然而用session這種方法server會有額外的儲存負擔...
Thumbnail
JWT全名JSON Web Token,因符合RESTful API無狀態原則而誕生。 傳統我們通常會用cookie/session的方式來做身分認證,也就是user登入後,用session id當作一種token,來做身份認證。 然而用session這種方法server會有額外的儲存負擔...
Thumbnail
概念: 有限時間內可使用通行證來要求對應的操作權限。 JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串 [HEADER].[PAYLOAD].[SIGNATURE] 1. Header: 主要記載認證的方法 {     "typ": "JWT",     "
Thumbnail
概念: 有限時間內可使用通行證來要求對應的操作權限。 JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串 [HEADER].[PAYLOAD].[SIGNATURE] 1. Header: 主要記載認證的方法 {     "typ": "JWT",     "
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News