Jwt簡術

JWT

什麼是JWT

官網裏能夠看到,JWT是一個開放協議,它以一個可靠的,獨立的方式方便在各方之間以Json的方式傳輸數據。Jwt能夠使用祕鑰(HMAC算法)或者公鑰/私鑰(RSA or ECDSA)的方式進行簽名html

應用場景

受權

經常使用如登陸,登陸成功後返回JWT,後續請求都會帶上這個JWT,好比SSO算法

信息交換

使用公鑰/私鑰對簽名時,能夠在不一樣對象間傳輸信息跨域

JWT結構

一個典型的JWT格式以下:編碼

xxx.yyy.zzz

能夠看到JWT由三部分組成,不一樣部分用.結合起來加密

  • Header
  • Payload
  • Signature

Header

Header格式以下:翻譯

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

alg表示所使用的算法,如HMAC,SHA256, RSA
typ表示token類型,也就是 JWT
Header通過base64編碼後會成爲JWT的第一部分code

Payload

Payload包含了一些Claims,Claims裏又包含了實體和額外信息,有三種類型的Claimsjwt

  • registered
  • public
  • private

一個典型的Payload以下:htm

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

registered Claim

registered Claim是預約義的聲明,不強制但建議使用,在RFC7519裏能夠看到,預約義的聲明有如下幾種對象

  • iss ((Issuer) Claim)
  • sub ((Subject) Claim)
  • aud ((Audience) Claim)
  • exp ((Expiration Time) Claim)
  • nbf ((Not Before) Claim)
  • iat ((Issued At) Claim)
  • jti ((JWT ID) Claim)

public Claim

public Claim是用戶能夠自定義的,可是爲了不使用衝突,應該遵循IANA JSON Web Token Registry 規範,

private Claim

private Claim就是用來存貯交換信息的部分

Payload通過base64編碼後就成爲了JWT的第二部分

Signature

將編碼後的Header和Payload組合在一塊兒,再加上secret,通過指定的算法加密就造成了JWT的第三部分

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

最後用.號串聯起來,最終就生成了一個JWT token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.b21wYW55X2lkIjoiZWQ5OGE4YTMtMWMyNi00OTM5LTg0MDQtMjU0OGUyMjgzOWVmIn0sImV4cCI6MTU2NzEzNzg0NywianRpVtIn0.sAlzke31nRGU_Gh_Ux8uh9uKmCnSYgQTk02GYzE97sU

使用方法

Authorization: Bearer <token>

優勢

  • 跨域
  • 比XML結構簡單,小巧
  • 跨平臺
  • 相比Session,無需落地存儲

英文版在這兒,這裏是我理解翻譯過來的
原地址

相關文章
相關標籤/搜索