如何在浏览器关闭后记住用户使用 jwt?

How to remember user using jwt even after browser closes?

我正在尝试在我的 expressjs、nodejs 和 angularjs 应用程序中使用 jsonwebtoken 和 express-jwt 为我的用户身份验证实施 json 网络令牌。我阅读了各种文章和教程,现在我对某些事情有点困惑。

首先我对 JWT 的了解是它由三个部分组成,以句点分隔:

  1. Header:描述jwt和算法。
  2. 有效负载:包含 information:issuer、观众、到期时间
  3. 签名:基于header和有效负载
  4. 的签名

因此每个请求都是使用令牌发出的,令牌在服务器上进行验证。根据 this article, issuer is the one who makes request. In case of user authentication, user is the issuer. Now using express-jwt 中间件,验证请求中的令牌 header 并将解码后的令牌附加到 req.user:

app.use(expressJwt({ secret: jwtSecret }).unless({ path: [ '/login' ]}));

payload的长度可以有多长?以及如何以及在何处保存客户端令牌,以便我的 session 即使在浏览器关闭后仍然存在,除非用户注销,就像 facebook 的 "keep logged in" 一样?因为我不希望在令牌过期时提示用户重新登录,所以我希望令牌续订,除非用户注销。

您可以将 JWT 存储在持久性 cookie 中或 browser local storage。有效负载的长度不受 JWT 本身的限制,而是受存储的限制。请记住,长令牌可能会给您的请求增加大量负载,或者可能需要额外的服务器配置以允许超长 HTTP headers.

如果您不希望 JWT 令牌过期,请在发布时相应地设置过期时间。如果 JWT 因用户无法撤销而泄露,这会带来额外的安全风险。