什么是JWT
Json Web Token, 簡稱 JWT别垮。
JWT 顧名思義,它是 JSON 結構的 token溯职,由三部分組成:
header
payload
signature
header
header 用于描述元信息但两,例如產生 signature 的算法:
{"typ":"JWT","alg":"HS256"}
其中 alg 關鍵字就指定了使用哪一種哈希算法來創(chuàng)建 signature
payload
payload 用于攜帶你希望向服務端傳遞的信息舆声。你既可以往里添加官方字段(這里的“字段” (field) 也可以被稱作“聲明” claims),例如 iss (Issuer), sub (Subject), exp (Expiration time)渔嚷,也可以塞入自定義的字段进鸠,比如 userId :
{"userId":"b08f86af-35da-48f2-8fab-cef3904660bd"}
signature 譯為「簽名」
創(chuàng)建簽名要分以下幾個步驟:
你需要從接口服務端拿到密鑰,假設為 secret
將 header 進行 base64 編碼形病,假設結果為 headerStr
將 payload 進行 base64 編碼客年,假設結果為 payloadStr
將 headerStr 和 payloadStr 用 . 字符串拼裝起來成為字符 data
以 data 和 secret 作為參數(shù),使用哈希算法計算出簽名
如果上述描述還不直觀漠吻,用偽代碼表示就是:
// signature algorithm
data = base64urlEncode( header ) + “.” + base64urlEncode( payload )signature = Hash( data, secret );假設我們的原始JSON結構是這樣的:
// Header
{"typ":"JWT","alg":"HS256"}
// Payload:
{"userId":"b08f86af-35da-48f2-8fab-cef3904660bd"}
如果密鑰是字符串 secret 的話量瓜,那么最終 JWT 的結果就是這樣的
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y
由此可見
JWT 的目的不是為了隱藏或者保密數(shù)據(jù),而是為了確保數(shù)據(jù)確實來自被授權的人創(chuàng)建的(不被篡改)