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