關於token的理解


什么是token

token的意思是“令牌”,是服務端生成的一串字符串,作為客戶端進行請求的一個標識。

當用戶第一次登錄后,服務器生成一個token並將此token返回給客戶端,以后客戶端只需帶上這個token前來請求數據即可,無需再次帶上用戶名和密碼。

簡單token的組成;uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,token的前幾位以哈希算法壓縮成的一定長度的十六進制字符串。為防止token泄露)。

使用token機制的身份驗證方法,在服務器端不需要存儲用戶的登錄記錄。流程:

客戶端使用用戶名和密碼請求登錄。服務端收到請求,驗證用戶名和密碼。驗證成功后,服務端會生成一個token,然后把這個token發送給客戶端。客戶端收到token后把它存儲起來,可以放在cookie或者Local Storage(本地存儲)里。客戶端每次向服務端發送請求的時候都需要帶上服務端發給的token。服務端收到請求,然后去驗證客戶端請求里面帶着token,如果驗證成功,就向客戶端返回請求的數據。

 

token的存儲

token可以存到數據庫中,但是有可能查詢token的時間會過長導致token丟失(其實token丟失了再重新認證一個就好,但是別丟太頻繁,別讓用戶沒事兒就去認證)。

為了避免查詢時間過長,可以將token放到內存中。這樣查詢速度絕對就不是問題了,也不用太擔心占據內存,就算token是一個32位的字符串,應用的用戶量在百萬級或者千萬級,也是占不了多少內存的。

token的加密

token是很容易泄露的,如果不進行加密處理,很容易被惡意拷貝並用來登錄。加密的方式一般有:

在存儲的時候把token進行對稱加密存儲,用到的時候再解密。文章最開始提到的簽名sign:將請求URL、時間戳、token三者合並,通過算法進行加密處理。

最好是兩種方式結合使用。

還有一點,在網絡層面上token使用明文傳輸的話是非常危險的,所以一定要使用HTTPS協議。


免責聲明!

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



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