Token流程是什么?
Token
Token是服務端生成的一串字符串,可以看做客戶端進行請求的一個令牌,客戶端在請求網絡上某些資源的時候,必須帶著這塊令牌(通行證)。
當客戶端第一次訪問服務端,服務端會根據傳過來的唯一標識userId,運用一些加密算法,生成一個Token,客戶端下次請求時,只需要帶上Token,服務器收到請求后,會驗證這個Token。
有些公司會建設統一登錄系統(單點登錄),客戶端先去這個系統獲取Token,驗證通過再拿著這些Token去訪問其他系統;API Gateway也可以提供類似的功能,我們公司就是這樣,客戶端接入的時候,先向網關獲取Token,驗證通過了才能訪問被授權的接口,并且一段時間后要重新或者Token。
基于Token的認證流程客戶端使用用戶名、密碼做身份驗證;
服務端收到請求后進行身份驗證;(也可能是統一登錄平臺、網關)
驗證成功后,服務端會簽發一個Token返回給客戶端;
客戶端收到Token以后可以把它存儲起來;每次向服務端發送請求的時候,都要帶著Token;
Token會有過期時間,過期后需要重新進行驗證;
服務端收到請求,會驗證客戶端請求里面的Token,驗證成功,才會響應客戶端的請求;
Token過期時間及超時刷新策略因為Token是訪問資源的憑證,所以必須要有過期時間。否則一次認證通過就可以永久使用資源,那么認證功能也就失去了意義,所以Token需要有過期時間。
Token的過期時間很容易甚至,在生成Token的元素中,增加時間戳即可;然后在驗證過程中,判斷是否超時;Token的超時時間不宜過長,也不宜過短,我們項目設置的是1個小時。
Token過期之后,需要重新獲取,一種方式是重新來一遍獲取Token的過程(比如重新登錄),這種做法實現起來簡單,但是用戶體驗不好;另外一種主動刷新Token,在過期后自動續約,或者定時任務定期去刷新Token,以保持Token始終在有效期內;我們現在采用被動的方式獲取和更新Token。
希望我的回答,能夠幫助到你!我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。