JSON Web Token(JWT) 簡介

Allan Sun
隨筆雜記
Published in
2 min readMar 14, 2017

--

本日 JWT 正夯,不寫一下太可惜 XD

JSON Web Token(JWT, RFC 7519) 顧名思義就是 JSON 格式的 Web token;如果你知道 token 是什麼那就很簡單,如果你不知道那你就簡單把他想成兩邊拿來傳資料的一種方式就好 XD

JWT 的主要好處有兩個:

  1. 輕薄短小(?):可以放在 POST 或者 HTTP Header
  2. 自含(???):payload 裡面就有所需要的資訊

JWT 的格式分為三個部分:

  1. Header:一個 Base64Url 過的 JSON,用來指定 hash algorithm(基本 HS256,也就是 HMAC SHA256)以及 token type (就是 JWT)
  2. Payload:一個 Base64Url 過的 JSON,可以放一些自己要的資料或者通用資料,像 iss(issuer) 或 exp(expiration time,不是經驗值 XD) 之類的
  3. Signature:檢查用,作法如下:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

把上面三個用「.」接起來就是一個完整的 JWT 了,像這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhbGxhbjkxNCJ9.mkl4nb3SipqDqPGYWg-Sf63dFgED-BbIEEq-TfFCIU8

用法的話,像認證功能的常用作法如下:

  1. Login 成功,Server 發 JWT 給 Client,Client 自己存起來
  2. Client 打 API 的時候送 JWT (HTTP Authorization header, Bearer schema)
  3. Server 確定 JWT 正確之後讓你打的不要不要的(茶)

跟 SWT(Simple Web Token) 比起來可以用 RSA 安全性應該是好很多,而且支援 JWT 的各語言 library 也超多,輕鬆用不慌 XD

至於今天 JWE(JSON Web Encryption) 的高潮(?)其實我覺得對 JWT 影響沒有那麼嚴重,大家記得更新用的 library 就好(特別是 Node.JS ?)

睽違好幾個月第一篇就這麼知性我是不是會被退訂啊😂

--

--