我目前正在构建一个将用于 Web 和移动应用程序的 RESTful API。将使用JSON Web Tokens对 API 进行身份验证。
使用 JWT 时,我们可以使用exp
声明在特定时间后使令牌过期。这与jti
声明相结合对于防止重放攻击以及将内置到我们的应用程序中的东西很有用。但是,为了方便用户,我们不想在每次请求时或在 30 分钟的短时间间隔后一直要求他们登录。
所以,我在考虑以下情况:
- 用户使用他们的电子邮件地址和密码登录
- 服务器在 1 小时内发回过期的 JWT
- 客户端向 API 发出另一个请求,在标头中传递 JWT
- 如果 JWT 有效,API 会发回请求的数据,以及另一个JWT,它会在 1 小时后再次过期
如果客户端在分配的 1 小时到期时间内没有发出任何进一步的请求,则后续请求将要求他们再次登录。
我的问题:这是在可用性和防止重放攻击之间权衡的最佳解决方案吗?