1

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

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

  1. 标头:描述 jwt 和算法。
  2. Payload:包含信息:发行者、受众、到期
  3. Signature:基于header和payload的签名

因此,每个请求都是使用令牌发出的,该令牌在服务器上进行验证。根据这篇文章,发行人是提出请求的人。在用户认证的情况下,用户是颁发者。现在使用express-jwt中间件,验证请求标头中的令牌并将解码的令牌附加到 req.user:

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

有效载荷的长度可以是多长?以及如何以及在何处将令牌保存在客户端,以便即使在浏览器关闭后我的会话仍然存在,除非用户注销,例如 Facebook 的“保持登录”?因为我不希望在令牌过期时提示用户再次登录,所以我希望令牌更新,除非用户注销。

4

1 回答 1

4

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

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

于 2015-01-14T07:44:53.247 回答