javascript - httpOnly cookie 中的 JWT - AuthGuard 和 protected 路由(Node.js、Angular)

标签 javascript node.js angular jwt

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

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

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

在当前的实现中,我在后端有特殊的路由,只是为了检查用户是否在 session 对象中有 jwt。但这不是很好的实现 - 客户端每次要加载 protected 路由时都必须发送请求。

谢谢你的想法。

最佳答案

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

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

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

  • token 信封有效(由您的 key 签名)。
  • 唯一标识符对应于有效的帐户/用户。

  • 不要使用 httpOnly cookie,几乎适用于任何事物!
    如果这个 JWT token 被泄露(即:被无数设备捕获,你的 http only 流量将通过),它会暴露一个攻击向量,允许攻击者冒充这个用户 session 。

    要回答您的其他问题,您可以将 JWT token 存储在类似 localStorage 的介质中。 . JWT 应该足够轻,您可以将它与每个请求一起发送。

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

    关于javascript - httpOnly cookie 中的 JWT - AuthGuard 和 protected 路由(Node.js、Angular),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119152/

    相关文章:

    javascript - 表级别的关键事件绑定(bind)

    JavaScript - 从数组中的多个输入获取值

    node.js - 为什么MongoDB Node Driver生成实例池被破坏错误?

    javascript - 如何在不调用 Protractor 中的后端服务的情况下测试登录页面?

    angular - 我可以使用自定义 ReflectiveInjector 策略来获取组件提供者吗?

    javascript - 在一个区间内生成两个随机数数组

    Node.js - 超出最大调用堆栈大小 - vm.runInNewContext

    javascript - 如何使用 koa2 运行简单的应用程序?

    javascript - 将 javascript 函数动态添加到 Angular 项目

    javascript - 如何在sequelize中选择案例查询?