JSON Web Token(JWT) 簡介

JSON Web Token(JWT) 簡介

1 什麼是 JWT?

JWT(JSON Web Token)是認證解決方案,下面介紹它的原理和用法.

2 JWT 的結構

JWT 的結構如下

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的具體表現是一個長字符串,中間用點(.)分隔成三個部分

這三部分分別指的是

Header(頭部)
Payload(負載)
Signature(簽名)

即:

Header.Payload.Signature

2.1 Header

{
  "alg": "HS256",
  "typ": "JWT"
}

alg屬性表示簽名的算法,默認是 HMAC SHA256(寫成 HS256);typ屬性表示這個令牌(token)的類型(type),一般是這兩個屬性,當然也可以加上其他自定義的屬性。

將上面的 JSON 對象使用 Base64URL 算法編碼就構成了 JWT 的 Header。

2.2 Payload

Payload 用來存放實際需要傳遞的數據。JWT 規定了下面7個可選字段(建議但不強制使用)。

iss (issuer):簽發人
exp (expiration time):過期時間
sub (subject):主題
aud (audience):受衆
nbf (Not Before):生效時間
iat (Issued At):簽發時間
jti (JWT ID):編號

除了官方可選字段,你可以在這個部分定義私有字段,如下:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

同樣上面的 JSON 對象使用 Base64URL 算法編碼就構成了 JWT 的 Payload。

2.3 Signature

Signature 部分是對前兩部分的簽名,防止數據篡改。

首先,需要指定一個密鑰(secret)然後,使用 Header 裏面指定的簽名算法(默認是 HMAC SHA256),按照下面的公式產生簽名。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

secret 要保存在服務端,JWT的簽發和驗證都需要用這個 secret,不能泄露

同樣使用 Base64URL 算法編碼就構成了 signature

最後,把 Header、Payload、Signature 三個部分拼成一個字符串,每個部分之間用"點"(.)分隔,就組成了完整的 JWT

3 使用方式

服務端返回 JWT 給客戶端,此後,客戶端每次與服務器通信,都要帶上這個 JWT。可以放在 HTTP 請求的頭信息Authorization字段裏面。

Authorization: Bearer <token>

或放在 POST 請求的數據體裏面

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章