【視頻+源碼】登錄鑑權的三種方式:token、jwt、session實戰分享
highlight: a11y-dark theme: Chinese-red
前言
因為我既對接過session、cookie,也對接過JWT,今年因為工作需要也對接了gtoken的2個版本,對這方面的理解還算深入。
尤其是看到官方文檔評論區又小夥伴表示看不懂,所以做了這期視頻內容出來:
內容提要:
- 結合商業項目需求集成gtoken
- gtoken緩存模式gcache和gredis使用對比
- 登錄鑑權後將用户信息賦值到context,供後續鏈路調用
- 自定義登錄、登出、權限驗證方法,各個方法分別寫什麼業務邏輯合適
視頻教程
視頻在這裏:本期內容對應B站的開源視頻
源碼分享
因為涉及的知識點比較多,視頻內容比較長。
如果你覺得看視頻浪費時間,可以直接閲讀源碼:
- goframe v2版本集成gtoken
-
分支:main
-
分支:main
-
分支:l10_登錄鑑權_jwt_自定義中間件
-
分支:l09_登錄鑑權_session
基本介紹
jwt和session的對接教程之前分享過,不作為這期內容的重點。如有需要可以私信我。
這期重點介紹Gtoken的對接:
Gtoken
是基於GoFrame
框架的token插件,通過服務端驗證方式實現token認證;已完全可以支撐線上token認證,通過Redis支持集羣模式;
- github地址:https://github.com/goflyfox/gtoken
- gitee地址:https://gitee.com/goflyfox/gtoken
注意問題: 全面適配GoFrame v2.0.0 ; GoFrame v1.X.X 請使用gtoken v1.4.X相關版本。
gtoken優勢
- gtoken支撐單點應用使用內存存儲,也支持集羣使用redis存儲;完全適用於企業生產級使用;
- 有效的避免了jwt服務端無法退出問題;
- 解決jwt無法作廢已頒佈的令牌,只能等到令牌過期問題;
- 通過用户擴展信息存儲在服務端,有效規避了jwt攜帶大量用户擴展信息導致降低傳輸效率問題;
- 有效避免jwt需要客户端實現續簽功能,增加客户端複雜度;支持服務端自動續期,客户端不需要關心續簽邏輯;
特性説明
- 支持token認證,不強依賴於session和cookie,適用jwt和session認證所有場景;
- 支持單機gcache和集羣gredis模式;
```go
緩存模式 1 gcache 2 gredis 3 fileCache
CacheMode = 2
支持服務端緩存自動續期功能 // 注:通過MaxRefresh,默認當用户第五天訪問時,自動續期 // 超時時間 默認10天 Timeout int // 緩存刷新時間 默認為超時時間的一半 MaxRefresh int ```
- 支持分組攔截、全局攔截、深度路徑攔截,便於根據個人需求定製攔截器;建議使用分組攔截方式;
- 框架使用簡單,只需要設置登錄驗證方法以及登錄、登出路徑即可;
- 在
gtoken v1.4.0
版本開始支持分組中間件方式實現,但依然兼容全局和深度中間件實現方式;
對比JWT
- 相比於JWT,Gtoken最大的特點是“有狀態”
- 另外一個特點是不需要客户端刷新token,而是服務端自動刷新token的過期時間
大家結合自己的場景去使用,不要刻意去追求“無狀態”或者“有狀態”。能解決自己實際問題的才是好插件:
上圖紅框,是插件作者在官方文檔評論區的解答。
延伸
之前分享jwt和gtoken文章的時候,和羣裏的一位大佬探討過。
如果你在登錄鑑權方面有很高的要求,比如要和灰產鬥智鬥勇,那麼建議你自己深入瞭解OAuth原理
在這裏也推薦一個很不錯的開源項目:
https://github.com/ego-component/eoauth2
好了,這期內容就到這裏,感謝大家的觀看,歡迎點贊支持。
一起學習
我們搞了一個高質量的技術交流羣,歡迎加入我們一起學習:私信我
微信號:wangzhongyang1993 公眾號:程序員升職加薪之旅 B站視頻:王中陽Go
本文正在參加「金石計劃 . 瓜分6萬現金大獎」
- Go異步任務處理解決方案:Asynq
- 一天約了4個面試,覆盤一下面試題和薪資福利
- 世界上最健康的程序員作息表!「值得一看」
- 8千字詳解Go1.20穩定版
- 不愧是微軟出品的工具,逆天!
- 【視頻 源碼】登錄鑑權的三種方式:token、jwt、session實戰分享
- 程序員副業接單做私活避坑指南
- Git操作不規範,戰友提刀來相見!
- 【簡歷優化】如何寫好項目的亮點難點?項目經歷怎麼寫最好?
- 技術男的春天:小姐姐求助&暖男分析
- 【簡歷優化】如何在簡歷中最大化體現出自己的學習能力?
- 如何快速學一門新語言?關鍵問題是什麼?
- Go WEB進階實戰:GoFrame結合電商項目深入理解Go知識點
- Go容易搞錯的知識點彙總
- 開發gRPC總共分三步
- 【答讀者問】把Go基礎學完後,是學web方向還是區塊鏈方向?
- Go WEB進階實戰:基於GoFrame搭建的電商前後台API系統
- 給想轉Go或者Go進階同學的一些建議
- 聽了大佬們的直播,我決定卷掘金小冊了。| Flag永不倒
- 爆肝兩千字整理《Go學習路線圖》| 文末投稿送投影