大名鼎鼎的JSON Web Tokens你知多少

什麼是JWT(JSON Web Tokens)?

  • JWT(JSON Web Token)是一個非常輕巧的規範,允許我們使用JWT在用戶和服務器之間傳遞安全可靠的信息。

為什麼冒出個JWT(JSON Web Tokens)?有什麼用,解決什麼問題?

  1. 傳統session、cookies有以下明顯的缺點:

a、cookies的安全性不好,攻擊者可以通過獲取本地cookies進行欺騙或者利用cookies進行CSRF攻擊。

b、使用cookies時,在多個域名下,會存在跨域問題。

c、session在一定的時間裡,需要存放在服務端,因此當擁有大量用戶時,也會大幅度降低服務端的性能。

d、多服務器時需要共享session。

2. 為了解決這些問題,JWT出現了。它不再有session、cookies上面列舉的缺點,不易被攻擊者利用,安全性提高了。利用Http傳輸token,沒有跨域問題。信息分散存儲在客戶端,服務端佔用資源變少,也就不存在session共享問題。

JWT(JSON Web Tokens)是如何工作的?

  1. 要了解工作原理,我們先看下JWT的組成結構

大名鼎鼎的JSON Web Tokens你知多少

JWT結構

JWT實際上是一個字符串,由三部分組成,頭部(HEADER)載荷(PAYLOAD)簽名(VERIFY SIGNATURE)

  • 頭部

    頭部用於描述關於該JWT的最基本的信息,例如其類型以及簽名所用的算法等。

    {

    "alg": "HS256",

    "typ": "JWT"

    }

    這是一個頭部樣例,描述了token的類型為JWT,使用的算法是HS256

  • 載荷

    載荷用於存儲數據,可以包含JWT標準字段,也可以自定義。列舉幾個標準字段以及含義:

    iss: JWT的簽發者

    sub: JWT所面向的用戶

    aud: 接收JWT的一方

    exp(expires): 什麼時候過期

    iat(issued at): 什麼時候簽發

    {

    "sub": "1234567890",

    "name": "John Doe",

    "iat": 1516239022

    }

    這就是一個載荷樣例,有3個字段,意思是:在這個1516239022(Unix時間戳)簽發的包含name=John Doe的token發送給1234567890用戶。

  • 簽名

    對頭部和載荷編碼連接內容使用加密算法進行加密,加密過程使用特定秘鑰。

    HMACSHA256(

    base64UrlEncode(header) + "." +

    base64UrlEncode(payload),

    ) secret base64 encoded

2.JWT的工作流程:

  • 客戶端使用賬戶密碼登錄

  • 登錄成功後服務端返回JWT

  • 客戶端再次請求其他時帶上JWT

  • 服務端接收到JWT後驗證簽名的有效性。

大名鼎鼎的JSON Web Tokens你知多少

JWT工作流程

大名鼎鼎的JSON Web Tokens你知多少

大名鼎鼎的JSON Web Tokens你知多少


分享到:


相關文章: