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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 如果大家也想使用gtoken替换jwt实现sso登录,那么这篇文章可以减少很多大家debug的时间,分享一下我的踩坑之旅。

gtoken


服务端出于优化项目体验的考虑,替换了之前校验登录状态的方式,由JWT替换为 Gtoken


gtoken替换jwt解决的问题


  1. 有效的避免了jwt服务端无法退出问题;
  2. 解决jwt无法作废已颁布的令牌,只能等到令牌过期问题;
  3. 通过用户扩展信息存储在服务端,有效规避了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。

如果遇到版本不一致的问题,比如提示这种:


微信图片_20221112190436.jpg


可以通过指定gtoken版本解决,比如这样:


go get github.com/goflyfox/gtoken@v1.4.1


如果我们是团队多人协作,碰到需要指定依赖版本的问题,我们可以考虑把go.mod提交到git中。

在遇到这个问题之前,我的习惯是把go.mod添加的gitignore中。

大家有没有更好的办法来解决需要指定依赖版本的问题呢?大家可以在评论区留言指教。


2 gtoken存储问题


如果你们的项目是集群应用,gtoken的存储就需要使用gredis模式,而不是单机的gcache模式了。

这就需要我们生成token和获取token的各个项目连接的redis是一致的。

如果你是集群应用,千万要确保涉及到gtoken生成和验证的各个项目连接的redis是一致的。

所以,大家遇到token校验不通过时,可以首先排查一下配置文件,是不是连接redis库的问题。


3 不能跨环境使用token


正如上面提到的,如果gtoken的存储是使用redis中来实现集群项目的共享。

那我们是不能跨环境使用token的,因为我们的本机、开发、测试、预发布、生产等环境往往连接的是不同的redis。


4 测试账号不规范问题


如果测试时多个用户登录同一个账号,可能会出现奇葩问题。

究其原因是这样的:

gtoken是允许多点登录的,所以支持大家使用同一个账号登录。

但是!如果其中一个人做了退出登录的操作,那么其他人的登录态也会失效,需要重新登录。

比如设置的token有效期是2个小时,且2小时内有请求操作,会刷新token的有效期。但是如果有多人登录同一个账号,其中一个人退出,那么其他人的登录态也会失效的。


总结


  1. gtoken版本问题
  2. 连接的redis库不一致问题
  3. 是否跨环境使用了token,导致校验不过的问题
  4. 多人登录同一个账号,有退出操作,导致登录态失效的问题

上面这些是我在开发中踩的坑,大家如果在集成gtoken时遇到登录态问题可以从这几个角度排查问题。


公众号:程序员升级打怪之旅

微信号:wangzhongyang1993

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
276 0
|
7月前
|
安全 Java 应用服务中间件
Shiro + JWT 进行登录验证
Shiro + JWT 进行登录验证
61 2
|
2月前
|
JavaScript
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(二)
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
49 0
|
2月前
|
存储 JSON JavaScript
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
115 0
|
4月前
【Azure APIM】在APIM中实现JWT验证不通过时跳转到Azure登录页面
【Azure APIM】在APIM中实现JWT验证不通过时跳转到Azure登录页面
|
5月前
|
存储 JavaScript 前端开发
文本,三步走构思,富文本点击提交能够存储到数据库当中(下),最快的方法,还是会看资料,因此会整合资料最好,直接看资料最快,因为是JWT的资料,我们要设置好登录的内容,看登录的地方怎样写的
文本,三步走构思,富文本点击提交能够存储到数据库当中(下),最快的方法,还是会看资料,因此会整合资料最好,直接看资料最快,因为是JWT的资料,我们要设置好登录的内容,看登录的地方怎样写的
|
5月前
|
安全 NoSQL Java
JWT和Security 登录权限判断和token访问和让token失效
JWT和Security 登录权限判断和token访问和让token失效
|
6月前
|
JSON 算法 Go
go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证
go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证
|
7月前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
121 3
|
7月前
|
前端开发 NoSQL 数据库
切图仔做全栈:React&Nest.js社区平台(一)——基础架构与邮箱注册、JWT登录实现
切图仔做全栈:React&Nest.js社区平台(一)——基础架构与邮箱注册、JWT登录实现

热门文章

最新文章