關於token的理解

什麼是token算法

token的意思是「令牌」,是服務端生成的一串字符串,做爲客戶端進行請求的一個標識。數據庫

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

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

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

客戶端使用用戶名和密碼請求登陸。服務端收到請求,驗證用戶名和密碼。驗證成功後,服務端會生成一個token,而後把這個token發送給客戶端。客戶端收到token後把它存儲起來,能夠放在cookie或者Local Storage(本地存儲)裏。客戶端每次向服務端發送請求的時候都須要帶上服務端發給的token。服務端收到請求,而後去驗證客戶端請求裏面帶着token,若是驗證成功,就向客戶端返回請求的數據。ui

 

token的存儲加密

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

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

token的加密字符串

token是很容易泄露的,若是不進行加密處理,很容易被惡意拷貝並用來登陸。加密的方式通常有:

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

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

還有一點,在網絡層面上token使用明文傳輸的話是很是危險的,因此必定要使用HTTPS協議。

相關文章
相關標籤/搜索