Kar*_*ash 1 redis node.js express jwt
我目前正在构建 Node.js 应用程序并尝试使用 JWT 来处理会话。在我见过的每个实现中,数据refresh-token都存储在快速数据库中,例如redis. 当令牌过期时,客户端发送 来refresh-token获取新的access-token,然后服务器检查 是否refresh-token在数据库中,然后生成新的令牌。
但既然refresh-token必须是服务器生成的,无法篡改,而且我们还可以检查是否过期,那为什么还要存储呢。如果是的logout话,我们不能只将user_id已登录的人存储在数据库中,而不存储refresh-token.
我也在考虑存储最新的而access-token不是refresh-token作为redis. user_id原因是access-token只有当前一个过期时我们才会生成新的。所以下面的情况不可能发生,
access-token和refresh-token。由于大多数实现仅将access-token客户端在注销期间提供的内容列入黑名单,因此我相信如果客户端使用 REST API,则这种情况是可能的。
那么存储 的用途是什么refresh-token,存储 的access-token反而会有任何好处。有关应用程序的更多信息,
redis登录用户,并列入黑名单access-token(在注销期间提供)。refresh和access令牌存储在 httpOnly cookie 中,并将access令牌作为不记名令牌发送。refresh-token在刷新访问令牌时在 POST 正文中发送。httpsTed*_*pac 10
让我回答您的每个问题:
refresh-token必须是服务器生成的,不能被篡改,而且我们还可以检查它是否过期,为什么我们需要存储它”:刷新令牌应该有很长的过期时间(可能是几个月),以便用户不必频繁登录应用程序(特别是在移动应用程序的情况下)。因此,如果恶意者窃取了用户的刷新令牌,则用户受保护的信息将长期暴露。如果发生这种情况,相当安全的应用程序应该具有检测用户 IP 地址突然变化并报告这些变化的机制。现在,如果用户确认其帐户中存在奇怪行为,则需要撤销其所有刷新令牌以保护其信息,而要做到这一点,需要控制某个用户拥有的刷新令牌,所以它们必须被存储。
logout话,我们不能只将其存储user_id在已登录的人的数据库中,而不存储refresh-token”:您需要存储“user_id”和刷新令牌,以便您可以控制某个“user_id”的所有刷新令牌(如上所述)。如果您只想存储已登录用户的“user_id”(而不存储刷新令牌),我不知道如何检查用户是否有权更新访问令牌而不必让用户登录。
access-token而不是refresh-token......”:| 归档时间: |
|
| 查看次数: |
7410 次 |
| 最近记录: |