前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache ShenYu实现新登录后让其他token失效

Apache ShenYu实现新登录后让其他token失效

作者头像
阿超
发布2024-08-23 19:48:49
240
发布2024-08-23 19:48:49
举报
文章被收录于专栏:快乐阿超

尔曹身与名俱灭,不废江河万古流。——杜甫

今天做了这么一个需求:

在shenyu登录时候让之前的token失效

这里主要是在token里添加了一个唯一标识符与数据库里的值进行校验,每次登录生成新的唯一标识符存储到数据库中

PR链接如下:

https://github.com/apache/shenyu/pull/5600

描述如下:

概述: 此拉取请求解决了新的登录会话应使同一用户的所有先前登录会话失效的业务需求。这是通过引入 client_id 字段来实现的,该字段唯一标识每个登录会话。 client_id 包含在 JWT 令牌中,并针对每个请求进行验证,以确保只有最新的会话保持活动状态。

引入的变化:

  1. 后端增强:
    • 向用户模型添加了一个 client_id 字段来跟踪当前会话的客户端 ID。
    • 更新了身份验证过程,以在每次登录时生成新的 client_id
    • 修改了 JwtUtils 以将 client_id 包含在生成的 JWT 令牌中并在令牌验证期间提取它。
  2. ShiroRealm 修改:
    • ShiroRealm 中添加了逻辑,以从 JWT 令牌中提取 client_id
    • 实施了一项检查,将提取的 client_id 与存储在用户会话数据中的内容进行比较。
    • 如果令牌中的 client_id 与存储的 client_id 不匹配,则会抛出 AuthenticationException ,从而使令牌无效。

详细代码变更:

1、用户模型:

  • 引入了一个新字段 clientId 来存储每个用户会话的活动客户端 ID。

2.JwtUtils修改:

  • 修改了 generateToken 方法以将 client_id 包含在 JWT 负载中。
  • 添加了从 JWT 令牌中提取 client_id 的方法。

影响: 此更新可确保新的登录使所有先前的令牌失效,从而通过防止多个活动会话使用相同的凭据来增强安全性。这种机制对于会话完整性和安全性至关重要的应用程序至关重要。

测试:

  • 添加了单元测试来验证 JWT 令牌中 client_id 的生成、包含和验证。
  • 集成测试确保旧令牌在新登录时失效,并且有效令牌得到正确身份验证。

文档: 相关文档部分已更新,以描述新的 client_id 字段及其在会话验证中的作用。

结论: 该 PR 通过确保只有最新的登录会话有效,显着增强了 Apache ShenYu 的安全框架。它提供了一种强大的机制,可以通过令牌重用来防止未经授权的访问,并与会话管理的最佳实践保持一致。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档