單點登錄與 JWT 1
JWT
全稱: Json Web Token 。
作用: JWT 的作用是 用戶授權(Authorization) ,而不是用戶的身份認證(Authentication) 。
用戶認證 指的是使用用戶名、密碼來驗證當前用戶的身份,即用戶登錄。
用戶授權 指用戶登錄成功后,當前用戶有足夠的權限訪問特定的資源。
傳統的
Session
登錄:
- 用戶登錄后,服務器會保存登錄的
Session
信息Session ID
會通過cookie
傳遞給前端http
請求會附帶cookie
這種登錄方式稱為 有狀態登錄 。
有狀態登錄(Session): 傳統上,我們會使用 Session 和 Cookie 來保存用戶的授權信息。第一步,登錄過程,用戶使用用戶名和密碼來登錄系統,服務器會來驗證用戶名和密碼是否正確,如果正確,服務器會給這個用戶創建一個包含用戶登錄信息、角色、權限的一個叫做 Session 的東西,然后把這個 Session 保存起來,同時把這個 Session 的 ID 以 Cookie 的形式發送給前端,表示用戶驗證成功,登錄完成了;接下來如果用戶希望訪問某些資源,前端要向后端發起一個 HTTP 的請求,同時相應的 Cookie 也會跟隨請求一起發送給服務器,而服務器取得 Cookie 以后就會去查找是否有 Session ID ,然后通過 Session ID 提取相應的 Session 來確定用戶的身份與權限,如果 Session 與 ID 相符,同時用戶的信息也能提供相應的權限,服務器就會認為這個用戶已經登錄了,隨后資源信息就會通過 HTTP 響應給前端。
無狀態登陸(JWT): 第一步,同樣是登陸,用戶使用用戶名和密碼登陸,如果登陸成功,服務器就會返回一個加密文檔,這個文檔就是 JWT ,其中包含用戶密碼以外,全部的認證信息,包括用戶名、Email、角色、權限等等,而前端在拿到 這個JWT 以后就可以把它保存起來了,可以保存到 Cookie 中,也可以保存到瀏覽器的 LocaStorage 里面,而生成的 JWT 不需要在后端保存,接下來第二步,用戶如果需要訪問某些權限的時候,這時候,用戶就要把 JWT 放在 HTTP 請求 herder 中與請求一起發送給服務器,服務器取得 JWT 以后 會使用私鑰給 JWT 文檔解密 ,如果解密成功而且數據依然有效則代表用戶已經登陸了,如果 JWT 所描述的用戶權限允許該用戶訪問資源,那么服務器就會把資源的信息,通過 HTTP 響應發回給前端。
區別與差異: 傳統上用戶登陸狀態會以 Session 的形式保存在服務器上,而 Session ID 則保存在前端的 Cookie 中;而使用 JWT 以后,用戶的認證信息將會以 Token 的形式保存在前端,服務器不需要保存任何的用戶狀態,這也就是為什么 JWT 被稱為無狀態登陸的原因,無狀態登陸最大的優勢就是完美支持分布式部署,可以使用一個 Token 發送給不同的服務器,而所有的服務器都會返回同樣的結果。
JWT官網: https://jwt.io/
來源:https://blog.csdn.net/weixin_45581482/article/details/119336595?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link ↩︎