gpt4 book ai didi

java - JWT 的 REST 安全性

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:02 27 4
gpt4 key购买 nike

我最近发现了用于 token 身份验证 + 授权的 JWT。我认为将用户信息包装在 token 中非常有用,因此我尝试在 Java/Spring web 项目中使用它。

起初,我的印象是:如果我拥有 token 中的所有用户数据,我就不需要将其存储在应用程序数据库中,也不需要为每个服务请求检索用户 + session 信息。这太棒了,可以有效提高服务访问性能。

但现在我对我的用例的 JWT“限制”有一些疑问。例如:如果用户被服务管理员禁用并且最后生成的 token 尚未过期怎么办?即使实际上未授权,用户也可以访问该服务...

这是 JWT 的限制还是我遗漏了什么?你能澄清我的疑问吗?

最佳答案

JWT 是独立的。优点之一是它不需要服务器 session 存储,因为数字签名保护了内容。

在 JWT token 到期时间之前使其失效的原因有多种:帐户删除/阻止/暂停、密码更改、权限更改、用户被管理员注销。看看Invalidating JSON Web Tokens

这是一个普遍的需求,根据您的用例,可以应用或组合多种技术

  1. 删除客户端 token

  2. token 黑名单:存储在注销和过期时间之间的 token ,标记过期并在每个请求中检查它。您需要服务器存储。您可以仅包含 ID,或使用 issued_at 并检查用户配置文件的最后更新

  3. 缩短到期时间并轮换。每隔几个请求发出一个新的。问题是在没有请求(例如关闭浏览器)时保持用户登录

其他常用技巧:

  • 如果帐户被新用户和密码登录泄露,允许更改用户唯一 ID
  • 包括上次登录日期以删除旧 token
  • 要在用户更改密码时使 token 无效,请使用密码的哈希值对 token 进行签名。如果密码更改,任何先前的 token 将自动无法验证。将该机制扩展到其他感兴趣的领域来签名。缺点是它需要访问数据库

关于java - JWT 的 REST 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38765466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com