說一說JWT鑑權

引言

最近幾天被頻繁問到了關於jwt得內容,決定寫一篇作文加深一下印象。

正文

jwt介紹

JWT是JSON Web Token的縮寫。
分爲三段(整個爲base64編碼):

  • 頭部:包括加密方式
  • 負載:包括用戶的不敏感信息
  • 簽名:用secret將前兩部分加密(利用第一個裏面的加密方式),主要用來驗證是不是本人簽發的

實踐過程

實踐過程中有兩個token,一個refresh Token、一個access Token。refresh token的作用就是使access token過期的時候更新access token。
具體流程如下:

  • 客戶端使用用戶名和密碼進行驗證
  • 服務端生成有效時間較短的Access Token,和有效時間較長的Refresh Token
  • 客戶端訪問需要認證的接口時,攜帶Access Token
  • 如果Access Token沒有過期,那麼久鑑權後返回客戶端需要的數據
  • 如果鑑權失敗(例如返回401錯誤),則使用Refresh Token向刷新接口申請新的Access Token
  • 如Refresh Token沒有過期,服務端向客戶端發新的Access Token
  • 客戶端使用新的Access Token訪問需要認證的接口。

提問

  1. 和傳統的鑑權方式有什麼區別?
    答: 多個服務器的時候,使用session的話十分佔用服務器的資源,而使用token的話,服務端只要保存一個key就可以了。
  2. 多個請求的時候,多次鑑權,如果Access Token過期了,多個Access Token?
    答:我整個時間過程使在路由請求之前使用中間件鑑權,類似於router.get('/', authorization(), controller.home.home.index);authorization是在一個路由跳轉之前的,只會有一次,此次要麼更新access Token,要麼跳轉到登錄頁,所以最後我們再頁面裏面請求的時候都是可用的access Token。
  3. 爲什麼要用refresh Token?
    答:主要是方便服務端禁用用戶的Token,只需要將refresh Token禁用或者刪除即可。

結語

JWT的使用提高了健全的功能和效率,用起來挺好的emmm
早點休息!!

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