跳到正文
馬克工具箱

JWT 線上解析

貼上 JSON Web Token,即可檢視頭部和載荷、判斷是否過期,並用金鑰或公鑰校驗簽名。全部在本地執行,生產環境的令牌不會發送到任何伺服器。

在瀏覽器本地執行,輸入的內容和檔案都不會上傳

解碼不等於校驗簽名,任何人都能構造出包含任意內容的令牌。

使用步驟

  1. 貼上令牌,帶不帶「Bearer 」字首都可以,三段內容會用不同顏色標出。
  2. 檢視解碼後的頭部和載荷,iat、nbf、exp 會顯示為具體時間和相對時間。
  3. 校驗簽名:HS256/384/512 填寫共享金鑰,RS、PS、ES、EdDSA 貼上 PEM 或 JWK 格式的公鑰。
  4. 需要時複製解碼後的 JSON。

引數說明

頭部(Header)
令牌的後設資料,通常包含 alg(簽名演算法)和 typ。kid 欄位說明是用哪把金鑰簽名的。
載荷(Payload)
宣告內容。標準欄位有 sub(主體)、iss(簽發方)、aud(受眾)、iat(簽發時間)、nbf(生效時間)、exp(過期時間),時間都是 Unix 秒。
簽名
證明頭部和載荷沒有被篡改。校驗需要金鑰(HMAC)或簽發方的公鑰(RSA、ECDSA、EdDSA)。
金鑰是 Base64 編碼的
有些服務以 Base64 形式儲存 HMAC 金鑰,如果你拿到的是編碼後的字串就勾選此項。

常見欄位

欄位 含義 示例
sub 令牌所屬主體(使用者 ID) "1234567890"
iss 簽發方 "https://accounts.example.com"
aud 接收方 "my-api"
exp 過期時間(Unix 秒) 1790427600
iat 簽發時間(Unix 秒) 1790424000
nbf 生效時間(Unix 秒) 1790424000
jti 令牌唯一 ID,用於防重放 "a1b2c3"

示例

令牌 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 解碼後頭部為 {"alg":"HS256","typ":"JWT"},載荷包含 sub、name 和 iat(2018 年 1 月 18 日)。使用金鑰 your-256-bit-secret 可以校驗通過。

常見問題

把生產環境的 JWT 貼上到這裡安全嗎?

令牌由瀏覽器裡的 JavaScript 解碼,不會上傳或記錄。但仍請像對待密碼一樣對待訪問令牌:在過期之前,持有有效令牌的人都能使用它。

能解碼出來就說明令牌是真的嗎?

不是。頭部和載荷只是 Base64URL 編碼,任何人都能讀取或偽造。只有用正確的金鑰校驗簽名通過,才能說明令牌確實由預期的一方簽發。

金鑰明明是對的,為什麼校驗失敗?

檢查金鑰是否是 Base64 編碼的、末尾有沒有多餘的空格或換行,以及頭部的演算法是否與簽發方一致。令牌哪怕改動一個字元,簽名也會失效。

alg 為 none 是什麼意思?

表示令牌聲稱沒有簽名。除非明確需要,服務端必須拒絕這類令牌,歷史上曾因為接受它導致過真實的認證繞過漏洞。

RS256 令牌的公鑰從哪裡獲取?

身份提供方通常在 /.well-known/jwks.json 公佈 JWKS 公鑰集合,找到 kid 與令牌頭部一致的那一把,以 JWK 格式貼上到這裡即可。

隱私說明

本工具完全在瀏覽器中執行,檔案和文字都在你的裝置上處理,不會上傳到我們的伺服器。

相關工具