1. 程式人生 > >session和token區別

session和token區別

獲取 session 校驗 返回 查詢 字符 無法 憑證 真的

分布式系統認證/授權
目前分布式系統存在兩種常用的認證授權方式:
分布式session和token

1.session的概念
session中存放登錄用戶的個人信息,創建session時,隨機生成一個session_id和其綁定,session_id會隨cookie下發到客戶端
session_id --- 服務器根據session_id查找session
cookies --- 存放session_id,客戶端請求時,瀏覽器自動帶上cookies中的session_id
2.分布式session的概念
用戶登錄後返回session_id()
後續用戶請求時,服務器根據這個session_id到一個集中存儲session的地方來查詢session(可以做成session微服務)
這樣應用服務器上不用存儲session,也能達到應用服務器無狀態(狀態轉移到某個集中存儲session的系統了)
3.token的概念
通常意義的token是把session中的內容都放到token中(可以明文形式或者用對稱加密算法加密(加密密鑰放在服務器端)),
再把這些內容做hash簽名(密鑰在服務器),把內容和其簽名拼接成一個字符串(這個就是token) 發送給客戶端,
客戶端後續請求都帶上這個token,服務器首先校驗token是否被篡改(根據hash簽名校驗),如果沒被篡改而且token
也沒過期(token中一般會有其生成時的時間),就把token中的用戶信息(可能還有權限信息等等)拿出來,直接使用,
不需要像session一樣去查詢具體用戶信息。

使用hash簽名(無法篡改)
服務器簽發(無法偽造)
過期時間都是服務器時間
密鑰都在服務器管理

JST(Json Web Token)規範
4.session_id和token區別
session_id和token都是登錄後服務器返回的登錄憑證,後續請求都要帶上這個登錄憑證,
他們主要區別是session_id都是一個隨機字符串(所以服務器需要保存這個隨機字符串和用戶個人信息的對於關系),
而token是一個相對固定的字符串(用戶個人信息是不變的,token生成時間會變化)
5.分布式session和token的區別
token是正真的無狀態,不用存儲映射關系,只通過CPU計算(加密/簽名)來認證token並獲取用戶個人信息
分布式session 只是把session集中存儲,保證應用服務器無狀態

session和token區別