我打算利用業餘時間,做個小網際網路産品來營運玩玩。目的是打發時間,學習并實際使用新技術,寫此系列文章作為記錄。不保證開發進度,不定時更新,看時間和心情。各位看官歡迎交流,希望不吝賜教,大家共同進步。
JWT,全稱是JSON WEB TOKEN,是一個開放的标準協定,我第一次接觸還是用node做後端服務的時候。想了解更多朋友可以自行搜尋了解。
這裡我想介紹下我設計的登入認證的過程,如果有什麼漏洞或者高見,歡迎評論交流。
登入認證設計思考曆程
一開始我覺得session就夠用嘛,我又不是做APP。但是有效期不能設定太長,畢竟占記憶體。
然後又想到自定義token認證,曾經我設計過一套token認證,用Redis存儲,每次http響應回去給前端一個新的,舊的token2分鐘内失效,最新的那個7天内有效。可以支援多端登入,也支援單端登入(就像以前QQ隻允許登入一個手機)。這套token确實也不錯,但是也占記憶體,我伺服器資源有限,不得不慎重考慮。
思來想去,我還是不要造輪子了,用JWT吧,存儲成本分散到用戶端上,伺服器驗證一下就好了。
設計思路
說到認證的設計,不得不想到“角色”、“權限”的設計,我這個小産品,初步設計了3個角色。
- 超級管理者 - 擁有最高權限
- 管理者 - 有用小區的管理權限,用在背景管理系統。
- 普通使用者 - 用在公衆号H5應用,移動端
我們都知道jwt的payload可以放資訊,我設計放置上面說的角色,還有使用者的openid
json web token生成
JWT的結構設計完成,可以思考在什麼時候發放jwt,什麼時候重新整理jwt了。
直接說結論,經過小小的疊代,我最終的設計如下:
微信登入+jwt認證
文字再簡述一下關鍵點:
- 先走微信登入流程,在後端最後重定向回前端之前,先在session裡存一下jwt。
- 前端再次發請求,雖然沒帶上jwt,但是後端知道你有,并把它放到響應頭。
- 前端攔截每個響應頭,發現有jwt,就重新整理本地的jwt并在下次帶上。
- 後端在jwt快過期的時候,會重新生成一個新的jwt給前端,通過響應頭傳回。
大家有沒更好的方式?歡迎讨論