為什么前端還要token設(shè)置到Authorization?
前端將token設(shè)置到Authorization字段可以防止跨站請(qǐng)求偽造(CSRF)攻擊。
將token存儲(chǔ)在cookie中,黑客可以通過(guò)在相同的域中的惡意網(wǎng)站上發(fā)送請(qǐng)求來(lái)獲取并使用該token。例:黑客可以使用跨站請(qǐng)求偽造 (CSRF) 攻擊來(lái)獲取并使用令牌。在這種攻擊中,黑客利用惡意網(wǎng)站上的漏洞來(lái)向受害者的網(wǎng)站發(fā)送請(qǐng)求,并在請(qǐng)求中包含該令牌。如果受害者已經(jīng)登錄到該網(wǎng)站,并且未采取預(yù)防措施,則該請(qǐng)求將被視為有效,并為黑客提供了對(duì)受害者賬戶的訪問(wèn)權(quán)限。為了防止這種攻擊,網(wǎng)站開(kāi)發(fā)人員可以采取一些預(yù)防措施。其中之一是在表單或請(qǐng)求中添加一個(gè)驗(yàn)證令牌,該令牌僅在客戶端和服務(wù)器之間傳遞,并用于驗(yàn)證請(qǐng)求的來(lái)源。還可以使用同源策略 (same-origin policy) 來(lái)限制網(wǎng)站上的 JavaScript 代碼只能與來(lái)自同一域的網(wǎng)站通信。
除此之外,使用 HTTPS 也有助于防止 CSRF 攻擊,因?yàn)樗鼤?huì)加密數(shù)據(jù)傳輸,并防止攻擊者篡改請(qǐng)求。
總之,防范CSRF攻擊需要在驗(yàn)證令牌,同源策略和加密傳輸之間進(jìn)行平衡,并確保網(wǎng)站具有足夠的安全措施來(lái)防止未經(jīng)授權(quán)的訪問(wèn)。
另外,設(shè)置在請(qǐng)求頭的token更加安全,因?yàn)樗粫?huì)被緩存到瀏覽器或代理服務(wù)器的歷史記錄中,并且在通過(guò) HTTPS 發(fā)送的請(qǐng)求中不會(huì)被攔截。將token存儲(chǔ)在請(qǐng)求頭中,更方便前端進(jìn)行管理,例如在用戶登錄或注銷時(shí),可以在請(qǐng)求頭中直接添加或刪除token,而不需要手動(dòng)管理cookie。一個(gè)具體的例子是,當(dāng)用戶登錄成功后,服務(wù)器會(huì)返回一個(gè)JWT(JSON Web Token)。前端可以將JWT存儲(chǔ)在請(qǐng)求頭的Authorization字段中。當(dāng)前端發(fā)送請(qǐng)求到后端時(shí),將會(huì)在請(qǐng)求頭中攜帶有JWT,后端可以根據(jù)這個(gè)JWT來(lái)驗(yàn)證用戶的身份。如果JWT有效,則后端會(huì)返回請(qǐng)求的數(shù)據(jù),否則返回錯(cuò)誤信息。這樣,后端就不需要再次驗(yàn)證用戶的身份,因?yàn)镴WT已經(jīng)驗(yàn)證過(guò)了。這樣,前端就可以在每次請(qǐng)求中攜帶JWT,而不需要在每次請(qǐng)求中都將用戶名和密碼發(fā)送給后端。這樣既提高了用戶的體驗(yàn),又提高了系統(tǒng)的安全性。總之,將token設(shè)置到Authorization字段中更安全,方便前端管理,保證了客戶端與服務(wù)端之間的安全性。