Go 項目開發實戰-用戶Token的刷新、踢人下線和防盜檢測
這節我們繼續講Token的刷新和主動踢人下線。
圖片
首先Token為啥刷新呢?很簡單為了安全性用戶AccessToken的時效性會相對較短,保證Token被其他惡意用戶拿到后也不能長時間用它來瀏覽用戶的數據。
即然有效期短那就得有合理的方式讓用戶的Token能夠被刷新,不然用戶使用產品期間隔一段時間就得登錄一次,一天登錄好幾次,用戶體驗可想而知,定是不會好的。
為什么要有刷新Token
在我們的用戶認證體系中,當用戶登錄成功后,在服務端存儲以下的Token信息和用戶會話信息。
圖片
這里我們設計了兩種Token:AccessToken以及RefreshToken,AccessToken專門用戶來接口請求中驗證請求的用戶身份,我們上面說過為了安全考慮它的時效比較短一般 0.5h ~ 2h,到期后客戶端可以用RefreshToken來刷新獲得新的Token信息。
RefreshToken的時效一般設的較長10 ~ 30天都可以,假設用戶首次登錄后過了幾天再來使用應用,客戶端仍能通過RefreshToken來刷新Token信息,用戶在短期未使用產品的情況下仍能保持住登錄態,不至于出現隔幾天再用每次都得重新登錄的情況。
所以兩個Token,AccessToken 時效短,RefreshToken 時效長,兩者結合,在安全性和用戶體驗上都有一定保證。
在上節用戶 Token 的派發、存儲和認證開發的功能中,項目的用戶登錄系統時,服務端存儲了上述Token和會話信息后會向客戶端下發以下圖示中的Token字段。
圖片
除了上面這張用戶登錄的情況,當客戶端進行Token信息的刷新時,這些Token字段也會更新并返回給客戶端,也就是說刷新Token信息后除了AccessToken會更新外,RefreshToken也會刷新,用戶登錄態的可保持時間又往后延長了一個新的周期。與此同時舊的RefreshToken我們并不會直接刪,而是設置延遲幾個小時刪除,為什么這么做呢?后面告訴你答案。我們先看一下Token刷新邏輯的實現。
Token刷新邏輯實現
我用下面這個順序圖說明了整個Token刷新的邏輯。
圖片
大家把這張圖中描述的Token刷新邏輯好好地看一下,通過這張圖可以看出來,刷新邏輯與生成邏輯只有兩處不一樣:
總結
本節的代碼版本號為c11,加入項目后訪問 https://github.com/go-study-lab/go-mall/compare/c10...c11 能看本章節的詳細代碼。

Token的主要邏輯到這里就開發完成了,接下來我們把它接入到用戶登錄的流程中去,另外現在的Token體系還不夠完善,因為對于用戶登出、重置密碼等需要主動過期Token和清除Session的邏輯我們還沒有覆蓋到,這些我們會在接下來的幾節中開發相應的功能時再去完善。




































