身份認(rèn)證
身份認(rèn)證,又稱(chēng) ”身份驗(yàn)證“,”鑒權(quán)“,是指通過(guò)一定的手段,完成對(duì)用戶(hù)身份的確認(rèn),例如:
各大網(wǎng)站的手機(jī)驗(yàn)證碼登錄,郵箱密碼登錄,二維碼登錄
為什么需要身份認(rèn)證
身份認(rèn)證的目的,是為了確認(rèn)當(dāng)前所聲稱(chēng)為某種身份的用戶(hù),確實(shí)是所聲稱(chēng)的用戶(hù)
例如:你去找快遞員取快遞,你要怎么證明這份快遞是你的
不同開(kāi)發(fā)模式下的身份認(rèn)證
對(duì)于服務(wù)端渲染和前后端分離這兩種開(kāi)發(fā)模式來(lái)說(shuō),分別有著不同的身份認(rèn)證方案
服務(wù)端渲染 推薦使用 Session 認(rèn)證機(jī)制
前后端分離推薦使用 JWT 認(rèn)證機(jī)制
什么是 Cookie
Cookie 是存儲(chǔ)在用戶(hù)瀏覽器中的一段不超過(guò) 4 KB 的字符串。它由一個(gè)名稱(chēng)(Name)、一個(gè)值(Value)和其它幾個(gè)用于控制 Cookie 有效期、安全性、使用范圍的可選屬性組成
不同域名下的 Cookie 各自獨(dú)立,每當(dāng)客戶(hù)端發(fā)起請(qǐng)求時(shí),會(huì)自動(dòng)把當(dāng)前域名下所有未過(guò)期的 Cookie 一同發(fā)送到服務(wù)器
Cookie 的幾大特性
自動(dòng)發(fā)送,域名獨(dú)立,過(guò)期時(shí)限,4KB 限制
Cookie 在身份認(rèn)證中的作用
客戶(hù)端第一次請(qǐng)求服務(wù)器的時(shí)候,服務(wù)器通過(guò)響應(yīng)頭的形式,向客戶(hù)端發(fā)送一個(gè)身份認(rèn)證的 Cookie,客戶(hù)端會(huì)自動(dòng)將 Cookie 保存在瀏覽器中。
隨后,當(dāng)客戶(hù)端瀏覽器每次請(qǐng)求服務(wù)器的時(shí)候,瀏覽器會(huì)自動(dòng)將身份認(rèn)證相關(guān)的 Cookie,通過(guò)請(qǐng)求頭的形式發(fā)送給服務(wù)器,服務(wù)器即可驗(yàn)明客戶(hù)端的身份

Cookie 不具有安全性
由于 Cookie 是存儲(chǔ)在瀏覽器中的,而且瀏覽器也提供了讀寫(xiě) Cookie 的 API,因此 Cookie 很容易被偽造,不具有安全性。因此不建議服務(wù)器將重要的隱私數(shù)據(jù)通過(guò) Cookie 的形式發(fā)送給瀏覽器
注意:千萬(wàn)不要使用 Cookie 存儲(chǔ)重要且隱私的數(shù)據(jù)! 比如用戶(hù)的身份信息、密碼等
Session 的工作原理

Session 認(rèn)證的局限性
Session 認(rèn)證機(jī)制需要配合 Cookie 才能實(shí)現(xiàn)。由于 Cookie 默認(rèn)不支持跨域訪問(wèn),所以,當(dāng)涉及到前端跨域請(qǐng)求后端接口的時(shí)候,需要做很多額外的配置,才能實(shí)現(xiàn)跨域 Session 認(rèn)證
注意:
當(dāng)前端請(qǐng)求后端接口不存在跨域問(wèn)題的時(shí)候,推薦使用 Session 身份認(rèn)證機(jī)制
前端需要跨域請(qǐng)求后端接口的時(shí)候,不推薦使用 Session 身份認(rèn)證機(jī)制,推薦使用 JWT 認(rèn)證機(jī)制
什么是 JWT
JWT(英文全稱(chēng):JSON Web Token)是目前最流行的跨域認(rèn)證解決方案
JWT 的工作原理
用戶(hù)的信息通過(guò) Token 字符串的形式,保存在客戶(hù)端瀏覽器中
服務(wù)器通過(guò)還原 Token 字符串的形式來(lái)認(rèn)證用戶(hù)的身份
