security - 注销时使 JWT 失效?

标签 security authentication jwt

我是 JWT 的新手,想知道当用户退出应用程序时是否可以在服务器端使 JWT 失效/作废(我也想知道它是否有意义 这样做!)。思路是:

  1. 用户点击其应用中的注销链接
  2. 应用调用 POST https://api.myapp.example.com/auth/invalidate
  3. JWT(它是 HTTP 请求 header 中的授权/不记名 token )以某种方式失效
  4. 现在,再也没有人可以使用那个 JWT

我不确定这是否是一种非正统的注销逻辑方法,或者即使在用户注销之后让 JWT 仍然有效是否可以接受(我想我可以缩短 JWT 的生命周期过期到,比如说,60 分钟之类的)。

再说一次:想知道是否可以使用(如果可以,怎么做?!)进行这种“无效”,以及它是否有意义这样做(如果不是,典型的注销流程是什么样的?!)。谢谢!

最佳答案

除了 token 到期日期(在 exp 声明中说明)之外,我可以想到几种使 JWT token 无效的方法:

更改 key

第一种方法需要更改用于在服务器端签署 token 的 key ,但对于您问题中描述的情况似乎不切实际。

将 token 标识符列入白名单

另一种方法(可能是更适合您的方法)涉及在服务器端的白名单中跟踪 token 。

  • 颁发 token 时,使用 jti声称在 token 中存储唯一标识符。同时将此唯一标识符添加到服务器端的白名单中。

  • 验证 token 时(除了检查签名、到期日期和其他您可能需要的声明),确保 jti 的值声明已列入白名单。

  • 当用户请求使 token 失效时,从白名单中删除 token 标识符。

对于 token 标识符,您可以使用 UUID

JWT 允许您执行无状态身份验证(一旦您验证了签名,您就可以信任 token ,然后在不依赖于外部实体的情况下执行身份验证)。白名单方法是一种权衡,以防您需要跟踪已发行的代币。

关于security - 注销时使 JWT 失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148876/

相关文章:

security - 如何安全地使用存储在保险库中的 github-private-key 的 concourse

security - Rainbow Tables 攻击甚至是威胁吗?

node.js - 每次连接到 mongoLab 时 Mongoose 身份验证都会失败

php - isset($_SESSION ['admin' ]) 是一种危险的授予访问权限的方式吗?

php - 使用 Facebook 登录作为移动应用程序的身份验证。

css - 用户自定义 CSS : What can go wrong?

windows - Hadoop webhdfs 需要身份验证

scala - 如何使用scala和play实现安全授权?

node.js - 我应该多么担心向 XSS 漏洞开放 JWT?

java - 如何从 JWT token 身份验证获取声明值