解碼 | 檢查 | 驗證

> 解碼 | 檢查 | 驗證 <

// 即時解碼和檢查JSON Web Token(JWT)

[安全]

本地處理

100%用戶端JWT解碼。您的權杖永遠不會離開瀏覽器。

[即時]

自動解碼

貼上或輸入時自動解碼JWT權杖。

[免費]

完整權杖檢查

查看標頭、酬載和簽名。檢查演算法和過期狀態。

// 關於JWT解碼

JWT結構:

JSON Web Token(JWT)由三個Base64URL編碼的部分組成,用點分隔:標頭.酬載.簽名。標頭指定演算法和權杖類型。酬載包含宣告(資料)。簽名驗證權杖的完整性。

範例:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.signature → {"alg":"HS256"} + {"sub":"1234"}

常見用途:

  • >除錯Web應用程式中的認證權杖
  • >檢查OAuth 2.0和OpenID Connect權杖
  • >驗證權杖過期和宣告
  • >理解RFC 7519的JWT結構
  • >檢查Base64URL編碼完整性

>> 常見問題

問:什麼是JSON Web Token(JWT)?

答:JWT(JSON Web Token)是一個開放標準(RFC 7519),用於以JSON物件的形式在各方之間安全地傳輸資訊。它緊湊、URL安全,廣泛用於身份驗證。

問:JWT的三個部分是什麼?

答:JWT由三個用點分隔的部分組成:標頭(演算法和類型)、酬載(宣告和資料)和簽名(驗證雜湊)。每個部分都經過Base64URL編碼。

問:沒有密鑰能解碼JWT嗎?

答:可以,JWT的標頭和酬載可以被任何人解碼,因為它們只是Base64URL編碼的(未加密)。密鑰僅用於驗證簽名。

問:JWT和基於工作階段的認證有什麼區別?

答:工作階段透過工作階段ID cookie在伺服器上儲存狀態。JWT是無狀態的——權杖本身包含所有必要資訊。

問:JWT過期如何運作?

答:JWT酬載中的exp宣告以Unix時間戳指定過期時間。超過此時間後,權杖應被視為無效。

// 常見的 JWT 簽章演算法

標頭的 alg 決定簽章方式。HS* 使用共享金鑰,RS*、PS*、ES* 和 EdDSA 使用金鑰對。

alg演算法
HS256HMAC + SHA-256
HS512HMAC + SHA-512
RS256RSA PKCS#1 v1.5 + SHA-256
PS256RSASSA-PSS + SHA-256
ES256ECDSA P-256 + SHA-256
EdDSAEd25519

// 在程式碼中驗證 JWT

僅解碼不會驗證任何內容。驗證時務必明確指定允許的演算法。

Node.js (jsonwebtoken)   jwt.verify(token, secret, { algorithms: ['HS256'] })
Python (PyJWT)           jwt.decode(token, key, algorithms=["HS256"])
PHP (firebase/php-jwt)   JWT::decode($token, new Key($key, 'HS256'))
Go (golang-jwt)          jwt.Parse(token, keyFunc, jwt.WithValidMethods([]string{"HS256"}))
Java (jjwt)              Jwts.parser().verifyWith(key).build().parseSignedClaims(token)

>> 更多問題

問:標準宣告 iss、sub、aud、exp、nbf、iat、jti 分別是什麼意思?

答:iss 是簽發者,sub 是主體(通常是使用者 ID),aud 是目標受眾,exp 是到期時間,nbf 是生效時間,iat 是簽發時間,jti 是權杖唯一 ID。時間均為 Unix 秒。

問:JWT 是加密的嗎?

答:常見的已簽章 JWT(JWS)並未加密,只是 Base64URL 編碼,任何人都能讀取內容。簽章只能防止竄改。不要在其中放置敏感資料,或改用加密的 JWE。

問:如何驗證 JWT 的簽章?

答:需要金鑰:HS256 使用共享金鑰,RS256/ES256 使用公鑰。伺服器會對 標頭.載荷 重新計算簽章並比對。本解碼器在瀏覽器中執行,不會替你驗證簽章,請使用經過審核的函式庫。

問:JWT 常見的安全問題有哪些?

答:常見問題:信任權杖自帶的 alg(尤其是 none)、HS256 金鑰過弱、未檢查 exp、iss、aud、在載荷中放敏感資料,以及把長期有效的權杖存放在 localStorage。

// 其他語言