網(wǎng)站的token機(jī)制是什么?
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-02-24 17:31:00
Token的意思是“令牌”,是服務(wù)端生成的一串字符串,作為客戶端進(jìn)行請求的一個(gè)標(biāo)識。當(dāng)用戶第一次登錄后,服務(wù)器生成一個(gè)token并將此token返回給客戶端,以后客戶端只需帶上這個(gè)token前來請求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。
Token的意思是“令牌”,是服務(wù)端生成的一串字符串,作為客戶端進(jìn)行請求的一個(gè)標(biāo)識。當(dāng)用戶第一次登錄后,服務(wù)器生成一個(gè)token并將此token返回給客戶端,以后客戶端只需帶上這個(gè)token前來請求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。
<
div>簡單token的組成;uid(用戶唯一的身份標(biāo)識)、time(當(dāng)前時(shí)間的時(shí)間戳)、sign(簽名,token的前幾位以哈希算法壓縮成的一定長度的十六進(jìn)制字符串。為防止token泄露)。
身份認(rèn)證概述
由于HTTP是一種沒有狀態(tài)的協(xié)議,它并不知道是誰訪問了我們的應(yīng)用。這里把用戶看成是客戶端,客戶端使用用戶名還有密碼通過了身份驗(yàn)證,不過下次這個(gè)客戶端再發(fā)送請求時(shí)候,還得再驗(yàn)證一下。
通用的解決方法就是,當(dāng)用戶請求登錄的時(shí)候,如果沒有問題,在服務(wù)端生成一條記錄,在這個(gè)記錄里可以說明登錄的用戶是誰,然后把這條記錄的id發(fā)送給客戶端,客戶端收到以后把這個(gè)id存儲(chǔ)在cookie里,下次該用戶再次向服務(wù)端發(fā)送請求的時(shí)候,可以帶上這個(gè)cookie,這樣服務(wù)端會(huì)驗(yàn)證一下cookie里的信息,看能不能在服務(wù)端這里找到對應(yīng)的記錄,如果可以,說明用戶已經(jīng)通過了身份驗(yàn)證,就把用戶請求的數(shù)據(jù)返回給客戶端。
以上所描述的過程就是利用session,那個(gè)id值就是sessionid。我們需要在服務(wù)端存儲(chǔ)為用戶生成的session,這些session會(huì)存儲(chǔ)在內(nèi)存,磁盤,或者
數(shù)據(jù)庫。
基于token機(jī)制的身份認(rèn)證
使用token機(jī)制的身份驗(yàn)證方法,在服務(wù)器端不需要存儲(chǔ)用戶的登錄記錄。大概的流程:
客戶端使用用戶名和密碼請求登錄。
服務(wù)端收到請求,驗(yàn)證用戶名和密碼。
驗(yàn)證成功后,服務(wù)端會(huì)生成一個(gè)token,然后把這個(gè)token發(fā)送給客戶端。
客戶端收到token后把它存儲(chǔ)起來,可以放在cookie或者Local Storage(本地存儲(chǔ))里。
客戶端每次向服務(wù)端發(fā)送請求的時(shí)候都需要帶上服務(wù)端發(fā)給的token。
服務(wù)端收到請求,然后去驗(yàn)證客戶端請求里面帶著token,如果驗(yàn)證成功,就向客戶端返回請求的數(shù)據(jù)。
利用token機(jī)制進(jìn)行登錄認(rèn)證,可以有以下方式:
用設(shè)備mac地址作為token
客戶端:客戶端在登錄時(shí)獲取設(shè)備的mac地址,將其作為參數(shù)傳遞到服務(wù)端
服務(wù)端:服務(wù)端接收到該參數(shù)后,便用一個(gè)變量來接收,同時(shí)將其作為token保存在數(shù)據(jù)庫,并將該token設(shè)置到session中??蛻舳嗣看握埱蟮臅r(shí)候都要統(tǒng)一攔截,將客戶端傳遞的token和服務(wù)器端session中的token進(jìn)行對比,相同則登錄成功,不同則拒絕。
此方式客戶端和服務(wù)端統(tǒng)一了唯一的標(biāo)識,并且保證每一個(gè)設(shè)備擁有唯一的標(biāo)識。缺點(diǎn)是服務(wù)器端需要保存mac地址;優(yōu)點(diǎn)是客戶端無需重新登錄,只要登錄一次以后一直可以使用,對于超時(shí)的問題由服務(wù)端進(jìn)行處理。