使用JWT如何限制账号不能同时在多台设备登录?

前期在没有考虑到限制账号不能同时登录多台设备之前,token生成规则就是简单以用户id生成的。

Token续签

目前token失效后的续签是由Redis负责的,实际与JWT无关(只用JWT来生成和销毁token)。
JWT生成token后将其存入Redis中,并设置过期时间为30分钟;增加一个拦截器,每次请求中带着token来到网关时,在拦截器中重置redis中token的过期时间,以此达到续签的效果。

限制多设备登录逻辑
  1. 在浏览器中关闭操作窗口后,立马重新打开登录页面(token在有效期内),点击登录按钮能够重新进入系统;
  2. 更换电脑登录,如果token在有效期内,则提示当前账号已在其他设备登录;
调整实现方式
  • 将用户id、用户类型、用户登录IP等做为用户信息,使用JWT根据用户信息生成token,对用户信息做一次hash(MD5算法),将hash值作为用户key,token作为值存入Redis;
  • 用户进行代理时,系统先根据用户信息做一次hash生成用户key,再根据用户key查询redis里此key是否存在,不存在说明token已失效,则生成新的token进行登录;
  • 若存在则token未失效,接下来从token中解析出IP地址,与当前请求中的IP进行对比1,若一致则认为是来自同一台设备上的操作,否则则认为是用户切换其他设备上进行登录,提示用户已在其他设备登录。

  1. 此处有个问题是同一个网关出口获取到的IP是相同的。 ↩︎

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot + JWT 可以实现用户在多处同时登录的功能。 JWT(JSON Web Token)是一种用于身份认证和授权的开放标准,其主要原理是通过生成一个token来代表用户身份,服务器通过解析和验证token来确定用户的身份和权限。 要实现用户在多处同时登录,可以通过以下步骤进行操作: 1. 用户登录时,服务器验证用户的用户名和密码是否正确,如果正确则生成一个JWT token,并将该token返回给用户。 2. 用户在其他地方登录时,服务器同样验证用户名和密码的正确性,如果正确则生成一个新的JWT token,并将该token返回给用户。 3. 客户端保存最新的JWT token,并在每次请求时将该token放入HTTP请求的Header中,作为身份认证的凭证。 4. 服务器在接收到请求时,验证JWT token的有效性和合法性,包括验证签名、验证过期时间等。 5. 如果一个用户的token已经过期或者用户在其他地方重新登录了,服务器会拒绝使用旧的token进行访问,同时要求用户重新登录获取新的token。 通过这种方式,用户可以在多个地方同时登录,并且服务器可以判断每个token的有效性,实现多处登录的功能。 需要注意的是,为了保证安全性,建议在生成JWT token时加入一些额外的信息,例如IP地址、浏览器信息等,来辨别不同设备登录情况,并在验证token时进行比对。 以上就是使用Spring Boot + JWT实现用户在多处同时登录的简要解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值