天天看點

Cookie,Session,JWT,Token 差別解析

cookie,session,token,jwt

基本概念

  • 認證
    • 證明你是你自己,驗證身份
  • 授權
    • 使用者授予第三方通路使用者的資源權限
      • 小程式,應用等擷取手機上的權限
  • 憑證
    • 認證,授權,媒介
      • 身份證,網站遊客模式,使用者模式的令牌

cookie

http無狀态協定,用戶端與伺服器進行會話,不會保留會話資訊,如果需要跟蹤通路者的身份證資訊,需要将會話狀态進行把儲存,通過維護cookie或者session來做到。

cookie是服務端發送至浏覽器上存在浏覽器内的一小塊資料,在下一次發送時會攜帶。

cookie不可跨域,但在一級域名和二級域名之間允許互相使用。domain屬性。

cookie屬性,鍵值對來存儲内容,domain域名,哪個路徑下生效用path,maxAge失效時間,expires過期時間,secure,加密傳輸(如果true,在https下才有效).httpOnly,無法通過JS腳本讀取Cookie資訊,還是能過通過Application中手動修改資訊,一定程度上防止xss攻擊

session

另一種記錄用戶端和伺服器會話狀态的一種機制。

session基于cookie實作,session是存儲在伺服器端,sessionid是存儲到用戶端的cookie中。

  • 流程
    • 第一次請求伺服器,伺服器根據送出的資訊建立Session
    • 請求傳回将Session的唯一辨別SessionId傳回給浏覽器
    • 浏覽器接收到SessionId資訊後,會将該資訊存入Cookie中,同時記錄Cookie此SessionID屬于哪個域名
    • 第二次請求伺服器時,檢視該域名下是否存在Cookie,存在Cookie自動也将其資訊發送給伺服器,伺服器從Cookie中找到SessionID,再根據SessionId查找對應的Session資訊,如果沒有就是沒有登陸或者登陸失效,如果找到就可以繼續操作。

差別:

  • 大小cookie4kb,session最多一個浏覽器一般是20個,預設不超過1024kb
  • 安全性,存在用戶端 一個存在服務端
  • 存儲類型,cookie時字元串,Session可以時任意類型
    • 有效期,Cookie可以時長時間儲存,Session在浏覽器清除cookie或者Session逾時的情況下都會失效。

Token

通路資源接口API所需要的資源憑證

簡單組成:uid使用者唯一身份辨別,time目前時間戳,sign簽名,token前幾位雜湊演算法壓縮成的十六進制字元串

  • 過程:
    • 用戶端使用使用者名,密碼登陸
    • 伺服器驗證請求,驗證是否成功,将使用者資訊生成token傳回給用戶端
    • 用戶端接收到token将其存在本地的cookie或者localstorage中
    • 用戶端在每一次請求時,都将token攜帶
    • 伺服器接收到請求,驗證用戶端攜帶的token,如果成功就向用戶端傳回請求的資料
  • 服務端不需要存token通過解析token的時間來換取session 的存儲空間,減輕伺服器壓力

Refresh Token

  • 通過RefreshToken來更新AccessToken,通常RefreshToken的時間長于AccessToken,當AccessToken失效以後,通過RefreshToken來重新擷取新的Token,如果RefreshToken也失效了,使用者隻能重新登陸

差別:

  • session服務端狀态化,記錄會話資訊,token令牌,服務端無狀态話,不會存儲會話資訊。
  • token更安全,有簽名,防止監聽以及重播攻擊,Session以來鍊路層保證安全

JWT

跨端認證解決方案

授權認證機制

過程:

  • 使用者輸入使用者名密碼登陸認證成功,傳回一個JWT
  • token儲存本地
  • 使用者需要在請求頭Authorization中使用Bearer添加JWT

JWT不使用Cookie,不存在跨域問題,使用者狀态不再存儲在伺服器内容中是無認證機制。JWT是自包含,減少了查詢資料庫的需要。

差別:

  • token需要查詢驗證使用者資訊,JWT是Token和Payload加密存儲在用戶端中,伺服器隻需要通過密鑰解密驗證,校驗也是JWT自己實作的,不需要查詢或者減少查詢資料庫

引用參考:https://juejin.cn/post/6844904034181070861#heading-22