淺談有狀態跟無狀態的認證(登入)_Stateful vs Stateless Authentication
在前幾篇我們知道JWT主要用於授權(Authorization)
而非使用者的身分認證(Authentication)
身分認證(Authentication)
就是指透過帳號或者使用者名稱跟密碼來驗證當前使用者的身分
講白話一點就是 用戶登入的功能
授權(Authorization)
代表當使用者登入後是否有足夠權限訪問特定某些資源
而通常web api回傳若無足夠授權
大多返回401 Unauthorized
Stateful vs Stateless Authentication
Stateful
傳統的登入機制也就是具有狀態的(Session-Based Authentication)
又可被稱作cookie-based Auth
使用者clinet端的Browser當進行LOGIN 表單提交後
會在Server端去建立與保存Session
再藉由cookie攜帶著session id 返回到Clinet端(session id會保存在前端cookie當中)
接著當登入後的用戶要訪問資源就會
攜帶包含session id的cookie再打到server端請求
Stateless
又稱 Token-Based Authentication (例如:JWT)
使用者clinet端的Browser當進行LOGIN 表單提交後
會於server針對跟身分認證有關的屬性(信箱,帳號,權限,通常不會包含密碼)作加密處理
並返回給clinet端一個token(jwt)
clinet接受後可能會保存於cookie或local storage
而且生成的這個token並不需要保存於server只存於clinet!(server完全不需要保存任何狀態)
利於分散式架構的部屬
接著當登入後的用戶要訪問資源就會將token封裝在http header當中
在發送請求給server做處理
server端接收到後會使用自己的私鑰來對請求文件做解密,用相同密碼來驗證JWT。
解密成功而且資料也仍在有效期限內則代表用戶確實已登入
若JWT描述的此用戶權限確實允許訪問特定資源就返回給clinet。
Ref:
https://github.com/facg3/Stateless-vs-stateful-authentication
https://ithelp.ithome.com.tw/articles/10235315?sc=iThelpR
https://medium.com/%E9%BA%A5%E5%85%8B%E7%9A%84%E5%8D%8A%E8%B7%AF%E5%87%BA%E5%AE%B6%E7%AD%86%E8%A8%98/%E7%AD%86%E8%A8%98-http-cookie-%E5%92%8C-session-%E4%BD%BF%E7%94%A8-19bc740e49b5
留言
張貼留言