gtoken替换jwt实现sso登录的排雷避坑

gtoken替换jwt实现sso登录的排雷避坑

本文主要介绍如何用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避免坑的信息,请关注我们的其他相关文章!

gtoken替换jwt实现sso登录的排雷避坑