本文主要介绍如何用gtoken代替jwt实现sso登录。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
目录
前言gtokengtoken代替jwt解决与JWTgtoken实现原理兼容的问题。陷阱之旅1 gtoken版本2 gtoken存储问题3无法使用令牌4跨环境测试帐户违规摘要
前言
前段时间编译的文章:gtoken替代jwt实现sso登录|我带你看了源代码,收到了大家的积极反馈。gtoken替代jwt实现sso登录的开发过程比较稳定,但是在测试联调的过程中暴露出了很多问题。
如果你也想用gtoken代替jwt实现sso登录,那么这篇文章可以减少很多调试时间,分享一下我的坑之旅。
gtoken
出于优化项目体验的考虑,服务器取代了之前查看登录状态的方式,JWT被Gtoken取代。
gtoken替换jwt解决的问题有效避免了jwt服务器无法退出的问题;解决jwt无法使颁发的令牌失效,只能等到令牌过期的问题;用户扩展信息存储在服务器中,有效避免了jwt携带大量用户扩展信息降低传输效率的问题;
兼容JWT
Gtoken代替jwt实现sso登录。JWT兼容性可以在前端和后端通信中实现。
我们的服务器端替换操作对前端同学应该是不敏感的,因为后端是兼容的,前端同学不需要修改什么。
gtoken实现原理
gtoken的实现原理和使用方法建议你看我的文章:gtoken代替jwt实现sso登录|带你看源代码。
本文就不赘述了。下面重点介绍下坑之旅:
踩坑之旅当您遇到登录问题时,可以从以下几个方面找到问题:
1 gtoken版本
如果我们使用的版本是gf1.x.x,那么只能使用gtokenv1.4.X的相关版本
gtoken v1.5.0版本完全适应GoFrame v2.0.0.
如果遇到版本不一致的问题,例如提示:
这可以通过指定gtoken版本来解决,例如:
去找github.com/goflyfox/gtoken@v1.4.1
如果我们在一个多人的团队中工作,遇到指定依赖版本的问题,可以考虑将go.mod提交给git。
在遇到这个问题之前,我的习惯是在gitignore中加入go.mod。
对于指定依赖版本的问题,有没有更好的解决方案?
2 gtoken存储问题
如果你的项目是集群应用,gtoken的存储需要使用gredis模式,而不是单机gcache模式。
这就要求我们生成令牌和获取令牌的每个项目所连接的redis是一致的。
如果你是一个集群应用,一定要确保gtoken的生成和验证所涉及的所有项目的redis是一致的。
因此,当遇到令牌验证失败时,可以先检查配置文件是否连接到redis库。
3 不能跨环境使用token
如上所述,如果gtoken存储在redis中实现集群项目的共享。
我们不能跨环境使用令牌,因为我们的本地、开发、测试、预发布和生产环境通常连接到不同的redis。
4 测试账号不规范问题
如果多个用户在测试期间登录同一个帐户,可能会出现奇妙的问题。
原因如下:
Gtoken允许多次登录,所以支持每个人用同一个账号登录。
但是!如果其中一人注销,其他人的登录状态也会失效,需要重新登录。
例如,如果设置令牌的有效期为2小时,并且在2小时内有请求操作,则令牌的有效期将被刷新。但如果多人登录同一个账号,其中一人注销,其他人的登录状态也会失效。
总结
Gtoken版本问题:连接的redis库不一致;是否跨环境使用token,导致多人登录同一个账号,由于退出操作导致登录状态无效的问题。
这些都是我在开发中踩过的坑。如果在集成gtoken时遇到登录问题,可以从这几个角度检查问题。更多关于gtoken替换jwt登录sso避免坑的信息,请关注我们的其他相关文章!