就個人的理解而言,各自有其優缺點,并且針對不同的場景需要進行約束性開發。
Token機制簡述Token的用途
用戶在登錄APP時,APP端會發送加密的用戶名和密碼到服務器,服務器驗證用戶名和密碼,如果驗證成功,就會生成相應位數的字符產作為token存儲到服務器中,并且將該token返回給APP端。
以后APP再次請求時,凡是需要驗證的地方都要帶上該token,然后服務器端驗證token,成功返回所需要的結果,失敗返回錯誤信息,讓用戶重新登錄。其中,服務器上會給token設置一個有效期,每次APP請求的時候都驗證token和有效期。
token+redis機制token + redis機制是中心化的,每次驗證token有效性時,都需要訪問redis,其核心優點實服務端可以主動讓token失效,缺點是每次都要進行redis查詢。占用redis存儲空間。
jwt機制這是一種無狀態身份驗證機制,因為用戶狀態永遠不會保存在服務器內存中。服務器受保護的路由將在授權頭中檢查有效的JWT,如果存在,則允許用戶訪問受保護的資源。由于JWT是獨立的,所有必要的信息都在那里,減少了多次查詢數據庫的需求。
用戶發起登錄請求,驗證通過后,服務端創建一個加密后的JWT信息,作為Token返回。在后續請求中JWT信息作為請求頭,發給服務端。服務端拿到JWT之后進行解密,正確解密表示此次請求合法,驗證通過;解密失敗說明Token無效或者已過期。
jwt的優點主要有:
1.t是去中心化的,便于分布式系統使用;
2. 基本信息可以直接放在token中。user_id,session_id;
3. 功能權限信息可以直接放在token中。用bit位表示用戶所具有的功能權限。其缺點有:服務端無法主動讓token失效,另一個是無法很好地控制payload的數據量。
小結jwt和token+redis兩種方案,沒有最優,只有結合不同的業務場景,尋求最適合的方案。