如果用户想从不同的机器上退出帐户,JSON Web 令牌 (JWT) 是不是会被拒绝或列入黑名单?

Posted

技术标签:

【中文标题】如果用户想从不同的机器上退出帐户,JSON Web 令牌 (JWT) 是不是会被拒绝或列入黑名单?【英文标题】:Can JSON Web Tokens (JWT) be rejected or blacklisted if a user wants to sign out of an account from a different machine?如果用户想从不同的机器上退出帐户,JSON Web 令牌 (JWT) 是否会被拒绝或列入黑名单? 【发布时间】:2016-07-30 13:26:15 【问题描述】:

我正在构建一个需要身份验证的应用,我担心用户可能希望能够远程注销。有没有办法使用 JSON Web 令牌并能够将它们列入黑名单或拒绝它们?我知道他们的好处是无国籍,但是远程注销会很好。

编辑:Express.js 使用 express-jwt 模块,有一个method to revoke tokens。此外,还有一个模块express-jwt-blacklist。我仍然不明白这些策略是如何工作的,并且想知道目前的最佳做法是什么。

【问题讨论】:

【参考方案1】:

关于 Auth0 有一篇不错的文章,关于 Blacklisting JSON Web Token API Keys 他们提供了一个很好的真实示例,说明如何将 JWT API 密钥列入黑名单,使其不再有效。你应该读一读。

解决问题

为将 JWT 列入黑名单提供支持会带来以下问题:

    如何单独识别 JWT? 谁应该能够撤销 JWT? 如何撤销令牌? 我们如何避免增加开销?

这篇博文旨在通过利用我们的 在我们的 API v2 中实现此功能的经验。

文章分解了每一点,然后展示了一些关于如何实现它的示例代码,最后是:

上述大部分内容适用于将 JWT 列入黑名单 通用,而不仅仅是 JWT API 密钥。

希望这篇博文提供了一些有用的想法,说明如何 解决这个问题。

我个人使用了类似的方法来撤销多次登录,其中令牌的使用与会话 ID 类似,并存储在 cookie 中。我将其建模为 GitHub 个人资料部分,用户可以在其中查看所有其他活动会话并在需要时撤销它们(远程注销)。

就最佳实践而言,我认为该主题将基于意见。但是,我确实将 Auth0 视为该 Topis 领域良好实践的来源,很多人在这方面都有经验。

更新:

在 npm 上找到这个 express-jwt plugin for token blacklisting

【讨论】:

以上是关于如果用户想从不同的机器上退出帐户,JSON Web 令牌 (JWT) 是不是会被拒绝或列入黑名单?的主要内容,如果未能解决你的问题,请参考以下文章

JSON Web Token exp 时间混淆

为不同的 Web 用户(管理员、客户)提供不同的菜单视图以创建新帐户

PassportJS 会话混淆了

具有不同用户的外部驱动器的权限[关闭]

验证码何时可以退出历史舞台?

win32 api - 如何检查远程机器上的用户权限