【視頻+源碼】登錄鑑權的三種方式:token、jwt、session實戰分享

語言: CN / TW / HK

highlight: a11y-dark theme: Chinese-red


前言

因為我既對接過session、cookie,也對接過JWT,今年因為工作需要也對接了gtoken的2個版本,對這方面的理解還算深入。

尤其是看到官方文檔評論區又小夥伴表示看不懂,所以做了這期視頻內容出來:

內容提要:

  1. 結合商業項目需求集成gtoken
  2. gtoken緩存模式gcache和gredis使用對比
  3. 登錄鑑權後將用户信息賦值到context,供後續鏈路調用
  4. 自定義登錄、登出、權限驗證方法,各個方法分別寫什麼業務邏輯合適

視頻教程

視頻在這裏:本期內容對應B站的開源視頻

源碼分享

因為涉及的知識點比較多,視頻內容比較長。

如果你覺得看視頻浪費時間,可以直接閲讀源碼:

基本介紹

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優勢

  1. gtoken支撐單點應用使用內存存儲,也支持集羣使用redis存儲;完全適用於企業生產級使用;
  2. 有效的避免了jwt服務端無法退出問題;
  3. 解決jwt無法作廢已頒佈的令牌,只能等到令牌過期問題;
  4. 通過用户擴展信息存儲在服務端,有效規避了jwt攜帶大量用户擴展信息導致降低傳輸效率問題;
  5. 有效避免jwt需要客户端實現續簽功能,增加客户端複雜度;支持服務端自動續期,客户端不需要關心續簽邏輯;

特性説明

  1. 支持token認證,不強依賴於session和cookie,適用jwt和session認證所有場景;
  2. 支持單機gcache和集羣gredis模式;

```go

緩存模式 1 gcache 2 gredis 3 fileCache

CacheMode = 2

支持服務端緩存自動續期功能 // 注:通過MaxRefresh,默認當用户第五天訪問時,自動續期 // 超時時間 默認10天 Timeout int // 緩存刷新時間 默認為超時時間的一半 MaxRefresh int ```

  1. 支持分組攔截、全局攔截、深度路徑攔截,便於根據個人需求定製攔截器;建議使用分組攔截方式;
  2. 框架使用簡單,只需要設置登錄驗證方法以及登錄、登出路徑即可;
  3. gtoken v1.4.0版本開始支持分組中間件方式實現,但依然兼容全局和深度中間件實現方式;

對比JWT

  1. 相比於JWT,Gtoken最大的特點是“有狀態”
  2. 另外一個特點是不需要客户端刷新token,而是服務端自動刷新token的過期時間

大家結合自己的場景去使用,不要刻意去追求“無狀態”或者“有狀態”。能解決自己實際問題的才是好插件:

上圖紅框,是插件作者在官方文檔評論區的解答。

延伸

之前分享jwt和gtoken文章的時候,和羣裏的一位大佬探討過。

如果你在登錄鑑權方面有很高的要求,比如要和灰產鬥智鬥勇,那麼建議你自己深入瞭解OAuth原理

在這裏也推薦一個很不錯的開源項目:

https://github.com/ego-component/eoauth2

好了,這期內容就到這裏,感謝大家的觀看,歡迎點贊支持。

一起學習

我們搞了一個高質量的技術交流羣,歡迎加入我們一起學習:私信我

微信號:wangzhongyang1993 公眾號:程序員升職加薪之旅 B站視頻:王中陽Go

本文正在參加「金石計劃 . 瓜分6萬現金大獎」