【发布时间】:2017-02-11 01:32:48
【问题描述】:
我的个人/爱好应用程序有一个基于 Koa 的 Node.js 后端。
我使用 JWT 令牌实现了会话处理。客户端(AngularJS)在成功登录后获取令牌并将令牌存储在某处(目前在sessionStorage,但就这个问题而言,这无关紧要)。
我有两个问题:
-
当我需要更新 JWT 代表的用户记录时,例如,用户打开了双因素身份验证 (2FA),所以我要求他提供他的电话号码,我想在用户的记录。目前,在电话号码成功验证后,我调用后端更新用户记录,并使用更新的用户记录创建一个新的 JWT 令牌(我从 JWT 令牌中排除敏感信息,如哈希密码,但我想包括客户端使用的电话号码)。当某些凭据发生更改并使用此新令牌更新现有客户端令牌时,是否可以创建新令牌?我是否应该永远不要创建另一个令牌,只创建一个并且仅在成功验证后才创建?然后如何更新令牌中的有效负载?
-
我应该如何处理过期的 JWT 令牌?在我看来,我有 3 个(可能的)场景:
2.1。 JWT 的寿命很短,比如 15 分钟。如果后端服务器回复 401 Unauthenticated“无效令牌”(我猜这是koa-jwt 的默认行为),那么我会自动注销我的客户端并要求重新进行身份验证。但我还设置了一个补充中间件,它是后端链中的最后一个,用于重新创建刷新到期的令牌,客户端也会用刷新的令牌替换现有令牌。因此,如果用户处于活动状态并使用应用程序,则每个受保护的 API 调用在成功的情况下都会创建一个新令牌来替换旧令牌。
2.2。 JWT 设置为长期有效,例如 1 周,如果过期,我会选择加入来自客户端的重新身份验证。
2.3。复制https://www.rfc-editor.org/rfc/rfc6749#section-1.5。在成功验证后创建 JWT 令牌时,我们发送一个 access_token 和一个 refresh_token。当 access_token 过期并且服务器以 HTTP 401 'invalid token' (koa-jwt 默认)响应时,客户端将 refresh_token 发送到后端以要求新的 access_token(以及可选的新 refresh_token) .在这种情况下,我不完全了解如何根据旧 access_token 验证 refresh_token 以提供新令牌?或者为什么我们需要一个 refresh_token?
任何关于上层主题(JWT 更新和 JWT 过期)的通用建议都会有所帮助。
【问题讨论】:
-
为什么不直接使用 cookie?
标签: javascript node.js jwt koa