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

时间:2015-01-14 04:33:27

标签: node.js express jwt express-jwt

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

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

  1. 标题:描述jwt和算法。
  2. 有效负载:包含以下信息:发行人,受众,到期
  3. 签名:基于标头和有效负载的签名
  4. 因此,每个请求都使用令牌进行,该令牌在服务器上验证。根据{{​​3}}文章,发行人是提出请求的人。在用户认证的情况下,用户是发行者。现在使用this中间件,在请求标头中验证令牌并将解码后的令牌附加到req.user:

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

    有效载荷的长度可以有多长?以及如何以及在何处在客户端保存令牌,以便即使在浏览器关闭后我的会话仍然存在,除非用户退出,例如Facebook"并且保持登录状态"?因为我不希望在令牌过期时提示用户再次登录,所以除非用户退出,否则我希望令牌续订。

1 个答案:

答案 0 :(得分:2)

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

如果您不希望JWT令牌过期,请在发布时相应地设置过期时间。如果JWT泄漏,这是一个额外的安全风险,因为用户无法撤销它们。