關於token和refresh token


最近在做公司的認證系統,總結了如下一番心得。

傳統的認證方式一般采用cookie/session來實現,這是我們的出發點。

1.為什么選用token而不選用cookie/session?
本質上token和cookie/session都是字符串,然而token是自帶加密算法和用戶信息(比如用戶id),;而cookie本身不包含用戶信息,它指向的是服務器上用戶的 session,而由session保存用戶信息。這點差別,決定token可以很容易的跨服務器,只要不同服務器實現相同解密算法即可;而cookie/session是存在於某一台服務器上,

要實現跨服務器比較困難,這是任何基於cookie/session應用天生的短板。

2.token需要過期時間嗎?
token即是獲取受保護資源的憑證,當然必須有過期時間。否則一次登錄便可永久使用,認證功能就失去了其意義。非但必須有個過期時間,而且過期時間還不能太長,

參考各個主流網站的token過期時間,一般不超過1h.

3.token過期該怎么辦?
token過期,就要重新獲取。那么重新獲取有兩種方式,一是重復第一次獲取token的過程(比如登錄,掃描授權等),這樣做的缺點是用戶體驗不好,每一小時強制登錄一次幾乎是無法忍受的。那么還剩第二種方法,那就是主動去刷新token. 主動刷新token的憑證是refresh token,也是加密字符串,並且和token是相關聯的。相比獲取各種資源的token,refresh token的作用僅僅是獲取新的token,因此其作用和安全性要求都大為降低,所以其過期時間也可以設置得長一些。

4.refresh token需要過期時間么?
客戶端需要保存token和refresh token,以便下一次訪問能繼續。如果客戶端是瀏覽器,那么兩個token都需要設置過期時間;但是可以設置得長一點,可以以天為單位(例如7天、15天);如果客戶端是一個服務器,那么refresh token可以永久有效,直到下一次登錄,refresh token本身被更新為止。

以上幾個問題是層層遞進的,雖說如此,也無法從邏輯上/理論上保證認證系統的絕對安全。但是,我覺得任何一種認證方式,都不能做到邏輯上的絕對安全和毫無漏洞。但是如果給攻擊者造成了足夠的麻煩,使其破解成本大大提升,那么我們就認為認證系統足夠安全了。認證功能最后的落地實現,總是和現實想妥協的結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM