gtoken替換jwt實(shí)現(xiàn)sso登錄的排雷避坑
前言
前段時(shí)間整理的文章:gtoken替換jwt實(shí)現(xiàn)sso登錄 | 帶你讀源碼 收到了大家積極的反饋,gtoken替換jwt實(shí)現(xiàn)sso登錄的開發(fā)過程是比較穩(wěn)健的,但是在我們測試聯(lián)調(diào)的過程中暴露出了很多問題。
如果大家也想使用gtoken替換jwt實(shí)現(xiàn)sso登錄,那么這篇文章可以減少很多大家debug的時(shí)間,分享一下我的踩坑之旅。
gtoken
服務(wù)端出于優(yōu)化項(xiàng)目體驗(yàn)的考慮,替換了之前校驗(yàn)登錄狀態(tài)的方式,由JWT替換為 Gtoken。
gtoken替換jwt解決的問題
- 有效的避免了jwt服務(wù)端無法退出問題;
- 解決jwt無法作廢已頒布的令牌,只能等到令牌過期問題;
- 通過用戶擴(kuò)展信息存儲(chǔ)在服務(wù)端,有效規(guī)避了jwt攜帶大量用戶擴(kuò)展信息導(dǎo)致降低傳輸效率問題;
兼容JWT
gtoken替換jwt實(shí)現(xiàn)sso登錄在前后端通信上是能做到兼容JWT的。
我們服務(wù)端的替換操作對前端同學(xué)應(yīng)該是無感的,因?yàn)楹蠖俗隽思嫒萏幚?,不需要前端同學(xué)修改任何東西。
gtoken實(shí)現(xiàn)原理
gtoken的實(shí)現(xiàn)原理以及如何使用建議大家讀我這篇文章: gtoken替換jwt實(shí)現(xiàn)sso登錄 | 帶你讀源碼。
在本篇文章中就不贅述了,下面重點(diǎn)介紹踩坑之旅:
踩坑之旅
當(dāng)大家遇到登錄問題時(shí)可以從這幾個(gè)方向定位問題:
1 gtoken版本
如果我們使用的版本是gf1.x.x,只能使用gtokenv1.4.X相關(guān)版本。
而gtoken v1.5.0
版本全面適配GoFrame v2.0.0。
如果遇到版本不一致的問題,比如提示這種:
可以通過指定gtoken版本解決,比如這樣:
go get github.com/goflyfox/gtoken@v1.4.1
如果我們是團(tuán)隊(duì)多人協(xié)作,碰到需要指定依賴版本的問題,我們可以考慮把go.mod提交到git中。
在遇到這個(gè)問題之前,我的習(xí)慣是把go.mod添加的gitignore中。
大家有沒有更好的辦法來解決需要指定依賴版本的問題呢
2 gtoken存儲(chǔ)問題
如果你們的項(xiàng)目是集群應(yīng)用,gtoken的存儲(chǔ)就需要使用gredis模式,而不是單機(jī)的gcache模式了。
這就需要我們生成token和獲取token的各個(gè)項(xiàng)目連接的redis是一致的。
如果你是集群應(yīng)用,千萬要確保涉及到gtoken生成和驗(yàn)證的各個(gè)項(xiàng)目連接的redis是一致的。
所以,大家遇到token校驗(yàn)不通過時(shí),可以首先排查一下配置文件,是不是連接redis庫的問題。
3 不能跨環(huán)境使用token
正如上面提到的,如果gtoken的存儲(chǔ)是使用redis中來實(shí)現(xiàn)集群項(xiàng)目的共享。
那我們是不能跨環(huán)境使用token的,因?yàn)槲覀兊谋緳C(jī)、開發(fā)、測試、預(yù)發(fā)布、生產(chǎn)等環(huán)境往往連接的是不同的redis。
4 測試賬號不規(guī)范問題
如果測試時(shí)多個(gè)用戶登錄同一個(gè)賬號,可能會(huì)出現(xiàn)奇葩問題。
究其原因是這樣的:
gtoken是允許多點(diǎn)登錄的,所以支持大家使用同一個(gè)賬號登錄。
但是!如果其中一個(gè)人做了退出登錄的操作,那么其他人的登錄態(tài)也會(huì)失效,需要重新登錄。
比如設(shè)置的token有效期是2個(gè)小時(shí),且2小時(shí)內(nèi)有請求操作,會(huì)刷新token的有效期。但是如果有多人登錄同一個(gè)賬號,其中一個(gè)人退出,那么其他人的登錄態(tài)也會(huì)失效的。
總結(jié)
- gtoken版本問題
- 連接的redis庫不一致問題
- 是否跨環(huán)境使用了token,導(dǎo)致校驗(yàn)不過的問題
- 多人登錄同一個(gè)賬號,有退出操作,導(dǎo)致登錄態(tài)失效的問題
上面這些是我在開發(fā)中踩的坑,大家如果在集成gtoken時(shí)遇到登錄態(tài)問題可以從這幾個(gè)角度排查問題,更多關(guān)于gtoken替換jwt登錄sso避坑的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言開發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)
這篇文章主要為大家介紹了Go語言開發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07詳解Go?將在下個(gè)版本支持新型排序算法pdqsort
這篇文章主要介紹了Go?將在下個(gè)版本支持新型排序算法:pdqsort,而就Go支持pdqsort算法,在HN上引起了不少的討論,有人表示,我們研究排序算法這么久了,很驚訝我們還能想出能產(chǎn)生實(shí)際改進(jìn)的優(yōu)化方案。對此,你怎么看,快快上手體驗(yàn)一下吧2022-04-04go語言區(qū)塊鏈實(shí)戰(zhàn)實(shí)現(xiàn)簡單的區(qū)塊與區(qū)塊鏈
這篇文章主要為大家介紹了go語言區(qū)塊鏈的實(shí)戰(zhàn)學(xué)習(xí),來實(shí)現(xiàn)簡單的區(qū)塊與區(qū)塊鏈?zhǔn)纠^程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10使用golang引入外部包的三種方式:go get, go module, ve
這篇文章主要介紹了使用golang引入外部包的三種方式:go get, go module, vendor目錄,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01解決Goland 提示 Unresolved reference 錯(cuò)誤的問題
這篇文章主要介紹了解決Goland 提示 Unresolved reference 錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12探索Golang實(shí)現(xiàn)Redis持久化AOF實(shí)例
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)Redis持久化AOF實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Go語言報(bào)錯(cuò):'godoc'?不是內(nèi)部或外部命令,也不是可運(yùn)行的程序(godoc無法使用處理)解決
這篇文章主要介紹了Go語言報(bào)錯(cuò):'godoc'?不是內(nèi)部或外部命令,也不是可運(yùn)行的程序(godoc無法使用處理)解決方法,詳細(xì)描述了Go語言godoc命令無法使用的原因、解決方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2024-01-01Golang學(xué)習(xí)筆記(四):array、slice、map
這篇文章主要介紹了Golang學(xué)習(xí)筆記(四):array、slice、map,本文分別講解了這3個(gè)類型的聲明&賦值、元素訪問、其它操作,需要的朋友可以參考下2015-05-05