我有一个节点服务器(带有Koa),在这里我用JWT从零开始实现了身份验证系统。我已经阅读了许多博客和指南,并且想出了这个流程,但不确定客户端:
/signin
电子邮件= ... pass = ... localStorage.currentUser = jwtTokenPayload
/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可以吗?