我真的很想使用 JWT 进行 API 访问,以保持其无状态。但与此同时,我需要拥有强大的安全资源来拒绝尚未过期的 token 。
对于更敏感的用户信息 API,我可以依靠强制重新登录、比较 IP 地址等。但我仍然希望能够在需要时撤销用户 token 。我不介意支付管理费用。
我的想法是让每个用户根据他们的密码创建自己的 key ,并将其存储在 session 中。我不介意用开销来换取更简单的方法来处理被盗的代币。这样,简单的密码重置就会使旧 token 失效。
承认这种权衡,这种方法有意义吗?有更好的方法来解决这个问题吗?
最佳答案
您应该在您的服务器上创建一个“黑名单”。如果需要撤销某个token,请将其放入黑名单中,并在该token过期时将其从黑名单中设置为过期。对于每次身份验证尝试,您将验证传入的 JWT 是否不在黑名单中。 Redis 可以让这变得非常简单。
或者,考虑第三方服务,例如 Stormpath 。免责声明:我为Stormpath工作。我们有一个 Oauth2 API,可让您发出访问+刷新 token (用于密码授予流程)。只要您不介意用于验证 token 状态的 REST 调用的开销,我们就会为您处理撤销。请参阅Using Stormpath for OAuth 2.0 and Access/Refresh Token Management 。我们在 Express-Stormpath 中对此提供了简单的支持。 .库
关于rest - JWT 用于无状态 API,但 session 控制用于安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34355767/