【发布时间】:2020-10-31 16:38:25
【问题描述】:
我正在实施一个身份验证系统。 系统当前使用 JWT 运行,并且没有刷新令牌。 为了让用户在合理的时间内保持登录状态,我们决定将令牌的过期时间设置为 12 小时。 我看到建议的过期时间是 15 分钟。
我的第一个问题是,是否每个想要让用户保持登录超过 15 分钟的应用程序都需要实现刷新令牌? 如果是这样,撤销是唯一的原因,还是安全方式(将刷新令牌保存在 httponly cookie 中,将 JWT 保存在内存中,而不是在 cookie 中公开令牌)也是一个原因?
当我寻找刷新令牌的优势时,我主要看到人们在谈论撤销,并将安全方式作为刷新令牌的实现细节,而不是优势。 但据我了解,这也是刷新令牌的优势之一。
我没有找到没有刷新令牌的 JWT 的过期时间标准。我想知道是不是因为从安全角度来看,在大型系统中不实现刷新令牌太危险了。
我的第二个问题是,是否可以通过将身份声明添加到刷新令牌中来实现刷新令牌并保持无状态(这样我就可以在不访问数据库的情况下生成新的 JWT)和放弃撤销?是安全漏洞吗?
在我看到的所有刷新令牌的实现示例中,我从未见过无状态的,因为它们都希望启用撤销。
我的第三个问题是,如果我没有实施撤销令牌的选项,那么从我在问题一中提到的安全优势中期待,是否有理由使用刷新令牌而不是每次系统收到请求时,只需创建一个具有新过期时间的新 JWT?
【问题讨论】:
标签: security authentication jwt refresh-token stateless