今天來聊聊-身份問題!
哈嘍,大家好,我是了不起。
日常開發(fā)中或者面試的時候經(jīng)常會遇到身份驗證的問題,下面這些都是關(guān)于身份驗證和授權(quán)的常用技術(shù)。
Session、Cookie、JWT、Token、SSO和OAuth 2.0 這些都是什么,在我們的應(yīng)用程序中有什么用,我們一起來看看!
前言
互聯(lián)網(wǎng)應(yīng)用的構(gòu)建中,確保用戶身份的安全性和便捷性是至關(guān)重要的。Session、Cookie、JWT、Token、SSO和OAuth 2.0都是用于身份驗證和授權(quán)的技術(shù).
找到一張圖,形象的展示他們再互聯(lián)網(wǎng)中的作用與關(guān)聯(lián)。
圖片
Session
Session是一種在多個請求之間保持狀態(tài)的方法。當(dāng)用戶登錄成功時,服務(wù)器會創(chuàng)建一個Session,生成一個唯一的Session ID,并將其保存在服務(wù)器端。同時,服務(wù)器會將這個Session ID作為Cookie發(fā)送給客戶端瀏覽器存儲起來。當(dāng)用戶再次發(fā)起請求時,瀏覽器會自動帶上這個Session ID,服務(wù)器據(jù)此識別用戶并恢復(fù)其會話狀態(tài)。
優(yōu)點:
- 安全性較高,因為Session ID可設(shè)置過期時間,并且存儲在服務(wù)器端。
- 可以跨域共享Session信息。
缺點:
- 需要服務(wù)器資源來維護(hù)Session數(shù)據(jù)。
- 分布式系統(tǒng)下Session共享問題復(fù)雜。
應(yīng)用場景:
- 適用于需要維護(hù)用戶狀態(tài)的場景,如在線購物網(wǎng)站,用戶在瀏覽商品時,服務(wù)器可以通過Session來記錄用戶的購物車信息。
- 適用于服務(wù)端渲染(SSR)的應(yīng)用,因為Session信息存儲在服務(wù)器端,適合服務(wù)端控制用戶會話。
- 適用于對安全性要求較高且能接受服務(wù)器資源消耗的場合,因為Session ID存儲在服務(wù)器端,相對安全。
Cookie
Cookie是服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小段文本信息。用于識別用戶或?qū)崿F(xiàn)其他功能,通常用來存儲Session ID或其他小量的用戶信息。每次HTTP請求時,瀏覽器都會自動將Cookie信息發(fā)送給服務(wù)器,這樣服務(wù)器就能識別用戶狀態(tài)。
優(yōu)點:
- 簡單易用,由瀏覽器自動管理。
- 可以實現(xiàn)自動登錄等功能。
缺點:
- 大小受限,一般不超過4KB。
- 存在安全風(fēng)險,如CSRF攻擊。
- 用戶可能禁用Cookie。
應(yīng)用場景:
- 常用于記住用戶登錄狀態(tài),如論壇網(wǎng)站可以記住用戶的登錄狀態(tài),用戶下次訪問時無需重新登錄。
- 適用于跟蹤用戶行為,比如廣告公司可能會用Cookie來收集用戶在不同網(wǎng)站上的行為數(shù)據(jù)。
JWT (JSON Web Token)
JWT是一種開放標(biāo)準(zhǔn),用于在網(wǎng)絡(luò)上安全地傳輸信息。它由三部分組成:頭部(Header)、有效載荷包含用戶信息和其他數(shù)據(jù)。簽名用于驗證消息的完整性和來源。。
優(yōu)點:
- 無狀態(tài)(Stateless),不需要存儲在服務(wù)器上。
- 可以輕松實現(xiàn)跨域認(rèn)證。
- 可以生成自包含的訪問令牌,減少網(wǎng)絡(luò)請求。
缺點:
- 若泄露則安全性降低,因為不依賴于服務(wù)器的存儲。
- 較難作廢單個Token。
應(yīng)用場景:
- 適用于無狀態(tài)認(rèn)證場景,尤其是在RESTful API和微服務(wù)架構(gòu)中,JWT可以被用來在客戶端和服務(wù)器之間安全地傳輸信息。
- 適用于跨域認(rèn)證,因為JWT可以編碼所有 claims 信息,方便在分布式系統(tǒng)中傳遞用戶身份信息。
Token
在身份驗證和授權(quán)領(lǐng)域,Token是一個廣泛的概念,可以是JWT,也可以是其他形式的訪問令牌。Token通常由服務(wù)器生成,并包含了用戶的權(quán)限或者身份信息??蛻舳嗽诤罄m(xù)請求中使用該Token來證明自己的身份或獲取授權(quán)。
優(yōu)點:
- 提供了一種簡單有效的方式來實現(xiàn)API的安全訪問。
- 可以獨立于用戶會話進(jìn)行身份驗證。
缺點:
- 需要妥善保管,避免泄露導(dǎo)致安全風(fēng)險。
SSO (Single Sign-On)
單點登錄,是一種讓用戶使用一組憑據(jù)(如用戶名和密碼)登錄一次,即可訪問多個應(yīng)用程序的技術(shù)。這樣可以避免用戶為每個應(yīng)用程序重復(fù)輸入憑據(jù)。
優(yōu)點:
- 提升用戶體驗,避免了重復(fù)登錄的不便。
- 減少了用戶記住多個賬號的需求。
缺點:
- 一旦SSO提供商被破解,所有關(guān)聯(lián)服務(wù)都面臨安全威脅。
- 實施和維護(hù)成本可能較高。
應(yīng)用場景:
- 適用于企業(yè)環(huán)境中,員工可以使用一組憑據(jù)訪問多個內(nèi)部系統(tǒng),如微軟的Active Directory就可以實現(xiàn)SSO功能。
- 適用于為用戶提供便捷的登錄體驗,例如Google賬戶可以登錄所有支持Google SSO的服務(wù)。
OAuth 2.0
是一個開放標(biāo)準(zhǔn),用于授權(quán)第三方應(yīng)用程序訪問用戶的資源 。它允許第三方應(yīng)用程序可以使用這個令牌訪問用戶存儲在某一服務(wù)提供商上的信息,而無需分享用戶的憑據(jù)。OAuth 2.0有四種授權(quán)流程:授權(quán)碼、隱式、密碼和客戶端憑證。
優(yōu)點:
- 提供了明確的授權(quán)機(jī)制,用戶可以精確控制數(shù)據(jù)訪問權(quán)限。
- 支持多種應(yīng)用場景和流程。
缺點:
- 協(xié)議相對復(fù)雜,實施難度較大。
- 需要良好的安全措施以保護(hù)授權(quán)過程中的敏感信息。
應(yīng)用場景:
- 適用于授權(quán)第三方應(yīng)用訪問用戶數(shù)據(jù)的場景,如用戶可以通過OAuth 2.0授權(quán)社交媒體賬號登錄其他應(yīng)用。
- 適用于構(gòu)建開放平臺時,允許開發(fā)者通過OAuth 2.0獲取用戶數(shù)據(jù)來開發(fā)第三方應(yīng)用。github,qq授權(quán)等。






























