認證授權設計基礎知識 筆記

什麼是認證

驗證當前用戶的身份相當與用身份證買火車票,需要證明自己是自己。
一般的認證方式有

  • 用戶名密碼
  • 郵箱發送登陸連接
  • 手機號接收驗證碼

授權

用戶授予第三方應用訪問該用戶的某些資源的權限 例如微信中允許第三方小程序獲得自己的暱稱和頭像地區等等的信息。
實現授權的方式:

cookie session token Oauth

憑證

實現認證和授權的前提是需要一種媒介(證書) 來標記訪問者的身份
身份證就是一種認證的憑證

cookie

  • 爲什麼http 協議是無狀態的
    對事務處理沒有記憶的能力。每次客戶端完成會話時,服務端不會保存任何的會話信息。
    服務端沒有辦法辨別上一次的請求和這一次是不是同一個人。服務器與瀏覽器爲了進行會話跟蹤(也就是要知道誰在訪問我)就必須主動維護一個狀態,用於告訴服務器前後兩次請求是不是來自同一個瀏覽器。
  • cookie 存儲在客戶端的。
    cookie 是服務器發送到用戶瀏覽器並保存在本地的一小塊數據,它會在瀏覽器下次向同一服務器再發起請求時被攜帶併發送到服務器上。
  • cookie 是不可跨域的
    每個 cookie 都會綁定單一的域名,無法在別的域名下獲取使用,一級域名和二級域名之間是允許共享使用的(靠的是 domain)。

session

  • session 是另一種記錄服務器和客戶端會話狀態的機制
    基於cookie 實現的,session 存儲在服務器端
    在這裏插入圖片描述
    SessionID 是連接 Cookie 和 Session 的一道橋樑

cookie 和 session 的區別

安全性: Session 比 Cookie 安全,Session 是存儲在服務器端的,Cookie 是存儲在客戶端的。
存取值的類型不同:Cookie 只支持存字符串數據,想要設置其他類型的數據,需要將其轉換成字符串,Session 可以存任意數據類型。
有效期不同: Cookie 可設置爲長時間保持,比如我們經常使用的默認登錄功能,Session 一般失效時間較短,客戶端關閉(默認情況下)或者 Session 超時都會失效。
存儲大小不同: 單個 Cookie 保存的數據不能超過 4K,Session 可存儲數據遠高於 Cookie,但是當訪問量過多,會佔用過多的服務器資源

什麼是 token(令牌)

Access Token
1 訪問資源接口(api)需要提供的資源憑證
2 簡單 token 組成
uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,token 的前幾位以哈希算法壓縮成的一定長度的十六進制字符串)
在這裏插入圖片描述
客戶端使用用戶名跟密碼請求登錄
服務端收到請求,去驗證用戶名與密碼
驗證成功後,服務端會簽發一個 token 並把這個 token 發送給客戶端
客戶端收到 token 以後,會把它存儲起來,比如放在 cookie 裏或者 localStorage 裏
客戶端每次向服務端請求資源的時候需要帶着服務端簽發的 token
服務端收到請求,然後去驗證客戶端請求裏面帶着的 token ,如果驗證成功,就向客戶端返回請求的數據
每一次請求都需要攜帶 token,需要把 token 放到 HTTP 的 Header 裏
基於 token 的用戶認證是一種服務端無狀態的認證方式,服務端不用存放 token 數據。用解析 token 的計算時間換取 session 的存儲空間,從而減輕服務器的壓力,減少頻繁的查詢數據庫
token 完全由應用管理,所以它可以避開同源策略

Refresh Token

另外一種token
refresh token 是專門用來刷新 access token 如果沒有refresh token,也可以刷新access token,但是每次刷新都要用戶輸入登陸用戶名比價麻煩。如果有了refresh token 客戶端可以直接用 refresh token 更新access token,用戶無法進行額外的操作。
在這裏插入圖片描述
8 token 和 session 的區別
如果你的用戶數據可能需要和第三方共享,或者允許第三方調用 API 接口,用 Token 。如果永遠只是自己的網站,自己的 App,用什麼就無所謂了。

JWT / 和Token的區別

JSON WEB Token 簡稱(JWT) 目前最流行的跨域認證 解決方案
是一種認證授權機制
Token:服務端驗證客戶端發送過來的Token,需要檢查數據庫獲取用戶的信息。然後驗證一下 Token 是否有效。
JWT:將Token 和payload 加密後存儲於客戶端,服務端只需要使用密鑰解密進行校驗(校驗也是JWT自己實現)即可,不需要查詢或者減少查詢數據庫,JWT 自己包含了用戶信息和加密數據。

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