iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

Jwt(JSON Web Token)是一種緊湊的、安全的方式用於在應用程式之間傳遞資訊。利用 Spring Boot 結合 Jwt,可以實現安全、高效的驗證流程。以下是 Spring Boot 中 Jwt Token 驗證流程的一個概要介紹:

JWT 是由三個部分組成的:Header(標頭)、Payload(負載)、和 Signature(簽名)。每個部分都是 Base64 編碼的,其中:

  • Header:通常包含兩個部分,token 的類型(typ),即 "JWT",和所用的簽名演算法(alg)。
  • Payload:承載實際的數據(即聲明)。這部分可以承載多個聲明(如用戶 ID、用戶角色等)。
  • Signature:將 Header、Payload 和密鑰進行簽名,保證數據的完整性和來源的真實性。

驗證流程

  1. Jwt 解析器配置:
  • 在 Spring Security 配置中,創建 Jwt 解析器,用於從 HTTP 請求中提取和解析 Jwt Token。
  • 通常,我們需要定義一個 JwtAuthenticationFilter 繼承自 OncePerRequestFilter,以攔截每一個經過的請求並檢查請求頭中的 Jwt Token。
  1. 提取 Jwt:
  • 從 HTTP 請求頭中提取 Jwt(通常是 Authorization 頭)。
  • 檢查 Token 是否存在和格式是否正確。
  1. 驗證 Token:
  • 使用事先定義的密鑰(Secret Key)來驗證 Token 的簽名。
  • 驗證 Token 是否過期。在 Payload 中通常會有一個 expiration(過期時間)的屬性。
  • 解析 Token 的 Payload 部分,從中檢索用戶信息(如用戶名、權限等)。
  1. 加載用戶細節:
  • 使用從 Jwt 中解析出的信息(如用戶 ID)調用用戶詳情服務(UserDetailsService)加載完整的用戶信息。
  • 構造一個 UsernamePasswordAuthenticationToken,並將其設置到 Spring Security 的上下文中,以表示當前用戶已驗證。
  1. 驗證成功及處理:
  • 如果驗證成功,請求將被允許繼續進入應用程式的其他部分。
  • 這樣可以實現基於角色的訪問控制和保護 API。
  1. 錯誤處理:
  • 若在 Token 的解析和驗證過程中出現問題,提供合適的錯誤反饋(如 Token 過期、無效 Token 等),並返回相應的 HTTP 錯誤狀態碼。

利用 Jwt 進行身份驗證,不僅能提高安全性,而且 Jwt 本身是無狀態的,這樣可以減少伺服器的存儲需求。在 Spring Boot 應用中通過一個完善的 Jwt 驗證流程,可以有效地保護整個 API 的安全性,保證應用僅能被授權的用戶訪問。這也是目前構建安全 API 的主流方式之一。


上一篇
Day 24 Jwt Token Final
下一篇
Day 26 Spring Boot Api Table
系列文
Spring Boot微服務架構:API設計與實現30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言