rest - JWT 用于无状态 API,但 session 控制用于安全

标签 rest security jwt

我真的很想使用 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/

相关文章:

security - 使用 openssl/makecert 工具创建 x509 证书

objective-c - 使用共享 Web 凭据时禁用弹出窗口(直接工作)

azure - 如何在 Rust 中解码 Azure JWT token 以在我的应用程序中使用有效负载

java - 在 REST Web 服务内的请求/响应场景中使用 Kafka

php - 如何在 Laravel REST API 中使用 PUT 方法更新图像?

rest - 电子邮件发送失败的 http 状态代码

c# - 发送带有授权 header 和 token 的发布请求返回未授权

javascript - 带有 REST 服务器的 Angular JS : Use and set temporary data(cookie or others)

security - 经典 ASP SQL 注入(inject)保护

java - 在 Java 中打印椭圆曲线 ASCII-Armor key