尔曹身与名俱灭,不废江河万古流。——杜甫
今天做了这么一个需求:
在shenyu登录时候让之前的token失效
这里主要是在token里添加了一个唯一标识符与数据库里的值进行校验,每次登录生成新的唯一标识符存储到数据库中
PR链接如下:
https://github.com/apache/shenyu/pull/5600
描述如下:
概述:
此拉取请求解决了新的登录会话应使同一用户的所有先前登录会话失效的业务需求。这是通过引入 client_id
字段来实现的,该字段唯一标识每个登录会话。 client_id
包含在 JWT 令牌中,并针对每个请求进行验证,以确保只有最新的会话保持活动状态。
引入的变化:
client_id
字段来跟踪当前会话的客户端 ID。client_id
。JwtUtils
以将 client_id
包含在生成的 JWT 令牌中并在令牌验证期间提取它。ShiroRealm
中添加了逻辑,以从 JWT 令牌中提取 client_id
。client_id
与存储在用户会话数据中的内容进行比较。client_id
与存储的 client_id
不匹配,则会抛出 AuthenticationException
,从而使令牌无效。详细代码变更:
1、用户模型:
clientId
来存储每个用户会话的活动客户端 ID。2.JwtUtils修改:
generateToken
方法以将 client_id
包含在 JWT 负载中。client_id
的方法。影响: 此更新可确保新的登录使所有先前的令牌失效,从而通过防止多个活动会话使用相同的凭据来增强安全性。这种机制对于会话完整性和安全性至关重要的应用程序至关重要。
测试:
client_id
的生成、包含和验证。文档:
相关文档部分已更新,以描述新的 client_id
字段及其在会话验证中的作用。
结论: 该 PR 通过确保只有最新的登录会话有效,显着增强了 Apache ShenYu 的安全框架。它提供了一种强大的机制,可以通过令牌重用来防止未经授权的访问,并与会话管理的最佳实践保持一致。