2024-10-19 009_學寫API_JWT的組成

2024-10-19 009_學寫API_JWT的組成

這個字符串是一個典型的 JSON Web Token (JWT),它由三部分組成,用 . 分隔,分別代表 HeaderPayload(即 Claims),和 Signature

JWT 組成

這個 Token 的組成部分如下:

  1. Header 部分(頭部)

    1
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    • 解碼後的內容
      1
      2
      3
      4
      {
      "alg": "HS256", // 算法:HMAC-SHA256
      "typ": "JWT" // 類型:JWT
      }
    • 作用
      • Header 指定了 Token 的類型(typ)和簽名算法(alg)。在這裡,算法是 HS256,即使用 HMAC-SHA256 算法來進行簽名。
  2. Payload 部分(負載)

    1
    eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
    • 解碼後的內容
      1
      2
      3
      4
      5
      {
      "sub": "1234567890", // 主題(Subject),通常是用戶 ID
      "name": "John Doe", // 用戶的姓名
      "iat": 1516239022 // Token 的發行時間(Issued At),通常是 UNIX 時間戳
      }
    • 作用
      • Payload 包含了一些用戶信息,這些信息稱為 Claims,用來描述 Token 所代表的實體,通常包括身份信息(如用戶名、用戶 ID 等)。
  3. Signature 部分(簽名)

    1
    SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    • 如何生成

      • 簽名是對前兩部分 (HeaderPayload) 的 Base64URL 編碼的內容進行加密生成的。
      • 使用的方法是 HMAC-SHA256,加密的密鑰是服務器上預先設置的。
      • 算法:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
    • 作用

      • 簽名的作用是保證 Token 的完整性。當接收到這個 Token 時,服務器可以使用相同的密鑰重新計算簽名,並與 Token 中的簽名部分進行比對,來驗證數據是否被篡改。

解釋 Token 中的 Claims

  • Header 主要用來描述 Token 的元數據,像加密算法等。
  • Payload 包含一些 Claims,例如:
    • sub(Subject):這裡的值是 "1234567890",通常表示用戶 ID 或唯一標識符。
    • name:用戶的姓名,這裡是 "John Doe"
    • iat(Issued At):Token 的簽發時間,這裡是 UNIX 時間戳 "1516239022",表示 Token 是在某個具體的時間點生成的。

作用

  • 這個 Token 用來對用戶的身份進行驗證和授權。
  • Token 一旦生成,可以作為後續 HTTP 請求的憑據,通過 Authorization Header 傳遞給服務器:
    1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • 服務器會解碼這個 Token,並檢查簽名是否正確,以及 Token 是否在有效期內。

這樣的機制讓用戶可以不需要每次請求都輸入帳號密碼,只需要在首次登入時提供正確的憑證,之後可以使用 Token 來認證和授權。