cookie和token身份驗證

HTTP Cookie(也叫Web Cookie或瀏覽器Cookie)是服務器發送到用戶瀏覽器並保存在本地的一小塊數據,它會在瀏覽器下次向同一服務器再發起請求時被攜帶併發送到服務器上。通常,它用於告知服務端兩個請求是否來自同一瀏覽器,如保持用戶的登錄狀態。Cookie使基於無狀態的HTTP協議記錄穩定的狀態信息成爲了可能。

Cookie主要用於以下三個方面:

會話狀態管理(如用戶登錄狀態、購物車、遊戲分數或其它需要記錄的信息)
個性化設置(如用戶自定義設置、主題等)
瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)

Cookie曾一度用於客戶端數據的存儲,因當時並沒有其它合適的存儲辦法而作爲唯一的存儲手段,但現在隨着現代瀏覽器開始支持各種各樣的存儲方式,Cookie漸漸被淘汰。由於服務器指定Cookie後,瀏覽器的每次請求都會攜帶Cookie數據,會帶來額外的性能開銷(尤其是在移動環境下)。新的瀏覽器API已經允許開發者直接將數據存儲到本地,如使用 Web storage API (本地存儲和會話存儲)IndexedDB 。

1. cookie身份驗證

  1. 用戶輸入登陸憑據;
  2. 服務器驗證憑據是否正確,並創建會話,然後把會話數據存儲在數據庫中;
  3. 具有會話id的cookie被放置在用戶瀏覽器中;
  4. 服務器驗證憑據是否正確,並創建會話;
  5. 在後續請求中,服務器會根據數據庫驗證會話id,如果驗證通過,則繼續處理;
  6. 一旦用戶登出,服務端和客戶端同時銷燬該會話在後續請求中,服務器會根據數據庫驗證會話id,如果驗證通過,則繼續處理;

在這裏插入圖片描述

2. token身份驗證

  1. 用戶輸入登陸憑據;
  2. 服務器驗證憑據是否正確,然後返回一個經過簽名的token;
  3. 客戶端負責存儲token,可以存在localstorage,或者cookie中
  4. 對服務器的請求帶上這個token;
  5. 服務器對JWT進行解碼,如果token有效,則處理該請求;
  6. 一旦用戶登出,客戶端銷燬token。

在這裏插入圖片描述

3. 二者特性對比

3.1 cookie

用戶登錄成功後,會在服務器存一個session,同時發送給客戶端一個cookie

數據需要客戶端和服務器同時存儲

用戶進行操作時,需要帶上cookie,在服務器進行驗證

cookie是有狀態的

3.2 token

用戶進行任何操作時,都需要帶上一個token

token的存在形式有很多種,header/requestbody/url 都可以

這個token只需要存在客戶端,服務器在收到數據後,進行解析

token是無狀態的

3.3總結

Token 完全由應用管理,所以它可以避開同源策略。

Token 可以避免 CSRF 攻擊。

Token 可以是無狀態的,可以在多個服務間共享。

參考鏈接:
http://www.jianshu.com/p/ce9802589143
https://blog.csdn.net/xiaoxinshuaiga/article/details/80766378
JSON Web Token 入門教程-阮一峯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章