HTTPS跟JWT(Json Web Token)觀念釐清

  • 425
  • 0
  • 2018-05-23

一開始想說HTTPS已經做加密動作

那再用JWT是不是多此一舉?

但兩者做的工作內容其實不一樣

HTTPS

工作原理:
1. client發request給server請求連線。
2. server回傳給client 他的公鑰。
3. client做出自己的私鑰+公鑰,再把自己的公鑰用server的公鑰回傳給server。
4. 雙方都有對方的公鑰了!那所有封包就都用對方的公鑰加密傳送,收到時自己用私鑰解加密封包。

結論:
HTTPS防止封包被側錄,不防client解密封包後想篡改的動作。

-----------------------------------------------------------------------------------------------------

JWT

原理:
把資料用base64編碼重組後,用SHA256之類的加密演算法做簽章,以此生成一個token(詳情自行Google)。

結論:
1. 因為有加密簽章,所以token裡面的資料就算被client改了也會認證失敗。
2. JWT內可代的資訊可以很多,但一般瀏覽器快取只有4KB,而JWT可以儲存在client的local storage上,當client端的session用。
3. 叢集式srver的情況下(假設現有主要server A + 備援server B ),若server A掛掉/重啟時,上面的session/記憶體等資料都消失了,那client切換到server B就要重跑一次。但用JWT儲存在local storage,可直接無縫接軌server B。
4. 前後端分離的架構下,後端盡可能只負責驗證誰要來存取API與回傳Data,其他消耗資源的動作盡量使用client端資源。