系统后端采用springboot,jwt认证,jwt设置了过期时间,并已实现jwt自动续签功能
请教一下:当用户退出登录时,是直接让前端删除用户jwt还是说后端将退出登录用户jwt添加到黑名单中?以及他们各自的安全性及其他考量?
系统后端采用springboot,jwt认证,jwt设置了过期时间,并已实现jwt自动续签功能
请教一下:当用户退出登录时,是直接让前端删除用户jwt还是说后端将退出登录用户jwt添加到黑名单中?以及他们各自的安全性及其他考量?
当用户退出登录时,处理JWT的方式可以因应用程序的需求和设计而有所不同。以下是两种常见的方法以及它们的优缺点:
* 安全性:这种方法可以防止恶意用户通过拦截已注销的JWT来伪造身份。由于JWT存储在前端,因此一旦用户注销,JWT就会被删除,从而无法再被使用。
* 用户体验:这种方法可以立即终止用户的会话,并清除他们在应用程序中的所有访问权限。
* 缺点:由于JWT存储在前端,因此如果用户清除了浏览器的本地存储或使用无痕浏览模式,则JWT可能会被保留。此外,如果用户在多个设备上使用应用程序,则每个设备都需要单独注销。* 安全性:这种方法可以防止已注销的JWT被重新利用。后端会将已注销的JWT添加到黑名单中,并在验证JWT时检查其是否在黑名单中。如果JWT在黑名单中,则拒绝访问请求。
* 用户体验:这种方法可能需要一些时间来更新后端的黑名单,因此用户可能在注销后仍然能够访问一段时间。此外,如果应用程序有多个后端实例,则需要确保所有实例都同步更新黑名单。
* 缺点:这种方法需要额外的后端逻辑来管理黑名单,并需要确保黑名单的同步更新。此外,如果后端出现故障或延迟更新黑名单,则可能会出现安全漏洞。
综上所述,选择哪种方法取决于应用程序的需求和设计。如果应用程序对安全性要求较高,并且不需要支持多设备登录,则前端删除JWT可能是一个更好的选择。如果应用程序需要支持多设备登录,并且对实时性要求较高,则将退出登录用户的JWT添加到后端黑名单中可能是一个更好的选择。
1 回答1.3k 阅读✓ 已解决
4 回答873 阅读
1 回答1.7k 阅读
如果你的jwt过期时间定义的如果足够短,就可以让前端直接剔除,业务安全性肯定没有拉入黑名单的安全性强, 当然如果你的业务需要达到很高的安全等级了, 你只是在 jwt 下功夫是不行的, 你将 jwt 拉入黑名单其实并不能防止 jwt 被盗用的问题, 理论上 现在主要应用 无论是 移动端 或者 pc端, 很少有会有用户主动会去 进行退出账户的操作, 导致业务实际其实都是 jwt 自然过期失效。其实这块代码也没提升安全性。
不过你想提高接口的安全性,可以从接口签名的方向去做。接口签名一般会把 时间戳,请求参数,流水号 这三个数据进行加密来实现接口的安全性
首先接口签名有以下好处
具体你可以看看这篇文章
https://www.cnblogs.com/hjzgg/p/11062043.html