繁体   English   中英

httpOnly cookie 中的 JWT - AuthGuard 和受保护的路由(Node.js、Angular)

[英]JWT in httpOnly cookie - AuthGuard and protected routes (Node.js, Angular)

我正在开发我的应用程序,我正在使用 JWT 进行身份验证和授权,我正在努力寻找存储 JWT 的最佳解决方案。 (在当前版本中,我将 JWT 存储在会话对象中的服务器上)

我当前的解决方案有很多问题,所以我决定采用不同的实现方式——将 JWT 存储在客户端的 httpOnly cookie 中。

我的问题是,我如何知道用户是否登录? (我需要知道这一点,因为 AuthGuard - 用于保护路由,例如/home不应该被注销的用户访问)。 由于 cookie 是 httpOnly,我无法在客户端验证它。

在当前的实现中,如果用户在会话对象中有 jwt,我在后端有特殊的路由来检查。 但这不是很好的实现——客户端每次想要加载受保护的路由时都必须发送请求。

谢谢你的想法。

您可以设置 JWT 本身的到期日期。 在客户端,您可以创建一个不断检查到期时间的循环(即: setInterval )。

不会仅依赖于存在 JWT 令牌这一“会话”有效这一事实。 仅使用 JWT 令牌来识别用户是谁,例如使用 UUID、随机字符串等。

对于每个后续的 API 请求,在传递 JWT 令牌时,您应该始终在服务器端执行验证以确保:

  1. 令牌信封有效(由您的密钥签名)。
  2. 唯一标识符对应于有效的帐户/用户。

不要使用httpOnly cookie,几乎任何东西! 如果此 JWT 令牌被泄露(即:被无数设备捕获,您的仅 http 流量将通过)它会暴露一个攻击向量,允许参与者模拟此用户会话。

要回答您的其他问题,您可以将 JWT 令牌存储在localStorage之类的介质中。 JWT 的本意是足够轻量级,您可以将它与每个请求一起发送。

希望这有助于为您阐明一些事情。 如果您还有任何疑虑或问题,请告诉我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM