在Web開(kāi)發(fā)領(lǐng)域,相信大家對于Cookie和Session都很熟悉,Cookie和Session都是會(huì )話(huà)保持技術(shù)的解決方案。隨著(zhù)技術(shù)的發(fā)展,Token機制出現在我們面前,不過(guò)很多開(kāi)發(fā)者對于Token和Cookie、Session的區別及使用場(chǎng)景分辨不清。
Cookie和Session的用途
要知道我們訪(fǎng)問(wèn)網(wǎng)站都是通過(guò)HTTP協(xié)議或HTTPS協(xié)議來(lái)完成的,HTTP協(xié)議它本身是無(wú)狀態(tài)的協(xié)議(即:服務(wù)器無(wú)法分辨哪些請求是來(lái)源于同個(gè)客戶(hù))。而業(yè)務(wù)層面會(huì )涉及到客戶(hù)端與服務(wù)器端的交互(同網(wǎng)站下多個(gè)頁(yè)面間能共享數據),此時(shí)服務(wù)器端必須要保持會(huì )話(huà)狀態(tài),這樣才能進(jìn)行用戶(hù)身份的鑒別。
由于HTTP無(wú)狀態(tài)的特性,如果要實(shí)話(huà)客戶(hù)端和服務(wù)器端的會(huì )話(huà)保持,那就需要其它機制來(lái)實(shí)現,于是Cookie和Session應運而生。

通常情況下,Session和Cookie是搭配在一起使用的。
Token是什么
上面說(shuō)到的Session和Cookie機制來(lái)保持會(huì )話(huà),會(huì )存在一個(gè)問(wèn)題:客戶(hù)端瀏覽器只要保存自己的SessionID即可,而服務(wù)器卻要保存所有用戶(hù)的Session信息,這對于服務(wù)器來(lái)說(shuō)開(kāi)銷(xiāo)較大,而且不利用服務(wù)器的擴展(比如服務(wù)器集群時(shí),Session如何同步存儲就是個(gè)問(wèn)題)!
于是有人思考,如果把Session信息讓客戶(hù)端來(lái)保管而且無(wú)法偽造不就可以解決這個(gè)問(wèn)題了?進(jìn)而有了Token機制。
Token俗稱(chēng)為“令牌”,它的構成是:
l uid:用戶(hù)唯一身份標識
l timestamp:當前時(shí)間戳
l sign:簽名字符串,防止第三方偽造數據;簽名密鑰是存儲在服務(wù)器端的,其它人無(wú)法知道
l 其它附加參數。
Token機制下的認證流程
Token機制其實(shí)和Cookie機制極其相似,主要有以下流程:
1、用戶(hù)登錄進(jìn)行身份認證,認證成功后服務(wù)器端生成Token返回給客戶(hù)端;
2、客戶(hù)端接收到Token后保存在客戶(hù)端(可保存在Cookie、LocalStorage、SessionStorage中);
3、客戶(hù)端再次請求服務(wù)器端時(shí),將Token作為請求頭放入Headers中;
4、服務(wù)器端接收請求頭中的Token,將用戶(hù)參數按照既定規則再進(jìn)行一次簽名,兩次簽名若一致則認為成功,反之數據存在篡改請求失敗。

(生成簽名示例圖)

(驗證簽名示例圖)
Token與Cookie+Session的區別
Cookie其實(shí)也充當的是令牌作用,但它是“有狀態(tài)”的;而Token令牌是無(wú)狀態(tài)的,更利于分布式部署。
以上就是我的觀(guān)點(diǎn),對于這個(gè)問(wèn)題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領(lǐng)域創(chuàng )作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗,歡迎關(guān)注我了解更多科技知識!
73 贊 踩 61評論
分享
舉報

碼哲之路 保險公司研發(fā)中心系統架構師 科技領(lǐng)域創(chuàng )作者05-21 22:07 關(guān)注
Token, 令牌,代表執行某些操作的權利的對象。
token主要用于鑒權使用,主要有以下幾類(lèi):
l 訪(fǎng)問(wèn)令牌(Access token)表示訪(fǎng)問(wèn)控制操作主體的系統對象
l 邀請碼,在邀請系統中使用
l Token,Petri 網(wǎng)(Petri net)理論中的Token
l 密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做認證令牌或者加密令牌,一種計算機身份校驗的物理設備
l 會(huì )話(huà)令牌(Session token),交互會(huì )話(huà)中唯一身份標識符
l 令牌化技術(shù) (Tokenization), 取代敏感信息條目的處理過(guò)程
cookie主要是網(wǎng)站用于在瀏覽器臨時(shí)存放的數據,包括瀏覽器緩存數據以及服務(wù)器設定的一些數據,主要存放在瀏覽器端。
session主要用于保存會(huì )話(huà)數據,一般存儲在服務(wù)器端,同時(shí)每一條session對用一個(gè)sessionID,sessionID是存放在瀏覽器的cookie中。
傳統上的會(huì )話(huà)登陸和鑒權主要用session加cookie實(shí)現,隨著(zhù)分布式系統的快速演進(jìn),尤其是微服務(wù)的應用,token+cookie的授權訪(fǎng)問(wèn)機制得到親睞,通常在用戶(hù)登錄后,服務(wù)器生成訪(fǎng)問(wèn)令牌(Access token),瀏覽器存儲cookie中,在每次請求資源時(shí)都會(huì )在請求頭中帶上token,用于服務(wù)器授權訪(fǎng)問(wèn)使用。
聯(lián)系客服