1. 程式人生 > >jwt對spring cloud進行系統認證和服務鑑權

jwt對spring cloud進行系統認證和服務鑑權

什麼是jwt

(json web token)jwt是一生中用來在網路上宣告某種身份的令牌(TOKEN),它的特點是緊湊且自包含並且基於JSON,通過一些常用的演算法對包含的主體令牌進行加密,安全性高。它通常有三個部分組成:頭令牌(Header)、訊息體(Payload)、簽名(Signature).Header通常用來宣告令牌的型別和使用的演算法,Payload主要用來包含使用者的一些令牌,Signature部分則是將Base64編碼後的Header的Payload進行簽名。

在微服務架構下,通常有單獨一個服務Auth去管理相關認證,為了安全不會直接讓使用者訪問某個服務,會開放一個入口服務作為閘道器gateway,只允許外網閘道器,所有請求首先訪問gateway,由gateway將請求路由到各個服務,spring cloud下通常使用zuul來實現閘道器。

如何實現登入、重新整理、登出

1、登入

在驗證身份資訊後可以使用工具包例如jwt根據使用者資訊生成token,設定有效時長,最後將token返回給客戶端儲存即可,客戶端只需要每次訪問時將token加在請求頭裡即可,然後在zuul增加一個filter,此filter來過濾請求,如果是登入獲取toke則放行,其他的話用公鑰解密驗證token是否有效。

2、重新整理

則需要在生成token時生成一個refreshKey,在登入時和token一併返給客戶端,然後由客戶端儲存定時使用refreshKey和token來重新整理獲取新的token。為了安全起見,伺服器可能需要快取refreshKey,每次重新整理token都將生成新的refreshKey和token,伺服器需要將老refreshKey替換,客戶端儲存新的token和refreshKey來進行之後的訪問和重新整理。

3、登出

首先在登入時生成token和refreshKey後,需要將token也進行快取,重新整理時更新token快取,最後對zuulFilter進行優化,在解密時先從快取中查詢token是否存在,如果沒有直接拒絕,如果有再解密驗證有效時長。在登出時只需要刪除快取 的token記錄就好。