引言
最近幾天被頻繁問到了關於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訪問需要認證的接口。
提問
- 和傳統的鑑權方式有什麼區別?
答: 多個服務器的時候,使用session的話十分佔用服務器的資源,而使用token的話,服務端只要保存一個key就可以了。 - 多個請求的時候,多次鑑權,如果Access Token過期了,多個Access Token?
答:我整個時間過程使在路由請求之前使用中間件鑑權,類似於router.get('/', authorization(), controller.home.home.index);
,authorization
是在一個路由跳轉之前的,只會有一次,此次要麼更新access Token,要麼跳轉到登錄頁,所以最後我們再頁面裏面請求的時候都是可用的access Token。 - 爲什麼要用refresh Token?
答:主要是方便服務端禁用用戶的Token,只需要將refresh Token禁用或者刪除即可。
結語
JWT的使用提高了健全的功能和效率,用起來挺好的emmm
早點休息!!