使用JWT进行节点身份验证-客户端流

时间:2020-02-15 09:37:24

标签: node.js authentication jwt koa

我有一个节点服务器(带有Koa),在这里我用JWT从零开始实现了身份验证系统。我已经阅读了许多博客和指南,并且想出了这个流程,但不确定客户端:

  1. [客户] POST /signin电子邮件= ... pass = ...
  2. [服务器] 验证传递哈希值(argon2),生成JWT令牌,并将其作为响应正文和Set-Cookie发送给客户端:token = jwtToken;安全; httpOnly
  3. [客户] localStorage.currentUser = jwtTokenPayload
  4. [客户] GET /resource =>很好,可以正常工作!

基本上,我将JWT令牌作为httpOnly安全cookie存储在浏览器中,我不想将其存储在local / sessionStorage中,然后将JWT令牌有效载荷存储在localStorage中,有效载荷是这样的:

{
  sub: 'someId',
  email: 'me@gmail.com',
  iat: 1234,
  exp: 2345
}

再次加载该应用程序时,我会读取localStorage并使用到期时间检查用户是否已登录,因此我可以重定向到/login/,当然,只是为了使用户体验更流畅,无论如何,我都致电/user/me来获取用户个人资料,并检查他是否真正登录。

此外,令牌会在7天后过期,因此我想在应用启动时调用/signin,不使用电子邮件+密码,但使用JWT令牌,并使用具有7d有效性的新令牌进行响应,这将是一种刷新机制。

这东西有用,但是我错过了什么吗?有什么不安全的东西吗?将JWT令牌存储为cookie可以吗?

0 个答案:

没有答案