【发布时间】:2026-01-13 17:40:01
【问题描述】:
我读过很多文章,看过很多视频,但有很多矛盾之处。我尽量避免使用任何外部库并从头开始构建系统,我已经阅读了有关 oAuth 2 的信息,但它更令人困惑。
这是我认为到目前为止还可以的流程:
- 用户使用电子邮件和密码填写表单并提交。
- 服务器验证密码是否匹配,并返回一个带有签名 jwt 令牌的 httponly cookie,该令牌在 10 后过期 分钟。 (我知道我必须保护它免受 csrf 攻击)
- 用户登录后,他向服务器发出的每个新请求都会自动发送标头中的 cookie,并且 服务器将验证令牌。
一切都很好,但我遇到了一些问题并有一些疑问:
我希望用户即使在打开新会话后仍保持登录状态,因此在令牌过期或关闭浏览器后无需登录。
如果访问令牌过期了怎么办?
应该有一个刷新令牌附加到数据库中的用户,当用户登录并过期 7 天时添加,然后服务器将响应包含该刷新令牌的 cookie?
在访问令牌过期的新请求中,用户将刷新cookie发送到服务器,如果它与用户数据库刷新令牌匹配,服务器将响应一个单独的cookie来更新访问令牌?
如果有刷新令牌,您应该将其存储在哪里以及采用什么格式? (cookie、数据库还是在哪里?)
我应该根据这个刷新令牌cookie保持用户登录吗?如果是httponly我无法读取它并设置用户登录的状态。我应该怎么做?
我听说撤销 jwt 令牌是有问题的。你会如何解决它?
这整个过程你会怎么做?请解释一下工作流程,我尽量避免使用本地存储,因为我到处阅读对敏感数据不安全的地方。
【问题讨论】:
标签: node.js rest express jwt restful-authentication