我们是否应该主要基于本地 jwt 令牌到期日期来验证用户

Should we base heavily on local jwt token expiry date to authenticate user

我正在按照网络上的一些教程学习 angular2。使用 jwt 令牌制作登录页面时,很多示例方法如下: - 当用户输入电子邮件和密码时,提交事件将调用身份验证 api - 成功的身份验证将 return 有效负载中带有到期日期的令牌。此令牌存储在本地存储中 - 受限路线导航将通过本地存储中的 getItem 检查经过身份验证的用户,检查令牌是否存在和到期日期

我的问题是: 我可以使用 localstorage 中的令牌轻松转到 jwt.io,稍后将过期号更改为其他内容,复制新生成的令牌并手动粘贴回 localstorage item

我的想法: 在任何路由导航之前调用 api tokenValidation,似乎会引入很多服务器调用

感谢您的想法

不,你不能那样做。 JWT 令牌的全部意义在于它们是加密签名的,使用只有服务器知道的密钥。因此,如果您试图篡改令牌中的到期日期或任何其他内容,服务器将检测到签名不匹配,并将拒绝该令牌。

所以是的,您将能够转到受保护的路由,但是一旦您尝试发出 HTTP 请求,您就会从后端收到错误消息(或者至少 应该得到一个)。客户端防护并不是真正的安全措施:组件的代码无论如何都可以在下载的包中使用。这是一项符合人体工程学的措施:如果用户无法访问路由,he/she 可以自动重定向到登录页面,例如。