有關於使用JWT實現前后端分離的疑惑


v2ex上的討論說得比較明白:[前后端分離, JWT 還是 Oauth2?](https://www.v2ex.com/amp/t/439613/2)

個人總結:

1. jwt 用於頻繁且不敏感的操作

很大程度上 token 的作用就是為了在請求量比較大且多終端復用的情況下,減少登錄和用戶數據查詢操作產生的數據庫壓力,如果每次還需要檢查 token 版本,不如直接用最基本的 session 來實現;修改密碼需要多終端下線的操作,可以通過向終端發送重新登錄的通知來實現,如果擔心之前的 token 沒作廢產生的安全風險,應該把在敏感場景中排除 token 的效力。比如,正常的查詢操作都可以使用 token,是不會觸發重新登錄的操作的,但如果涉及到財產、敏感信息的查詢和操作,都應該進行重新登錄並用 session 維護登錄信息。token 永遠不是安全性高的解決方案。token 也不是為了這種場景存在的。

2.  JWT的設計中包含了 expire time,方案是放在 jwt 的 payload 中; token 刷新預留一個 path 就 ok 了,訪問這個 path,提取並驗證用戶信息后發一個新的 token 返回給客戶端;后端禁用在 jwt 的設計中是不能實現的,當然你可以在數據庫里保存 token 並標記,但這違反了 jwt 的設計原則,要真是有這樣的需求,說明你的使用場景不適合 jwt

 

3. 如果你需要以下功能,JWT不適用
  第一:對 token 刷新使用期限
  第二:支持 token 失效

4. JWT 的過期和刷新,未看

參考業界主流做法,AWS、Azure 和 Auth0 都是用 JWT 為載體,ID Token + Access Token + Refresh Token 的模式:

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-token-and-claims

https://auth0.com/docs/tokens

 

 

 

可能參考的文章:

1. https://www.cnblogs.com/EasonJim/p/7824293.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM