【问题标题】:How to use JWT for a proxy server written using Node.js?如何将 JWT 用于使用 Node.js 编写的代理服务器?
【发布时间】:2025-11-24 00:05:03
【问题描述】:

这绝对是一个新手问题,我是 Node.js 初学者。

我不确定,这是问这个问题的正确地方。但我可能需要这个大社区的想法。所以让我解释一下我想要做什么。

服务器配置:

  1. Node.js - 4.0.0
  2. Hapi.js - 10.0.0
  3. Redis

场景:

我正在使用 hapijs 在 nodejs 中编写代理服务器。我的后端是基于 ATG 的电子商务网站,我的 api 将被网络浏览器、移动应用程序等使用。

我们计划不将 ATG 发送的 cookie 发送到浏览器和移动设备。

所以为了维护来自 ATG 的会话和 cookie,这就是我们完成 POC 的方式。

首先,我们计划不考虑存储从 ATG 返回的匿名用户 cookie。所以我们做了两个 POC。

(我们很多人都知道,匿名 cookie 是什么,如果我输入一个词——Guest Checkout,让我解释一下。有很多方法可以做到这一点。但是我的 Commerce Backend 是这样实现的,当我们去网站,您将商品添加到购物车并结帐该商品而无需登录对吗?每当我们添加仅存储在您的浏览器 cookie 中的商品时,在后台会发生这种情况,而不是存储在持久数据库中,无论如何用户都想要登录/注册从浏览器中检索 cookie 并存储在数据库中的帐户(基本上,匿名购物车被转移到登录用户。))

POC-1(不考虑客人结账):

  1. 要访问我的api,用户必须登录,成功登录后,我们生成一个rand-token并将其存储在Redis db中,与从ATG发送给登录用户的cookie相关联并设置ttl 1 小时并将该令牌返回给客户端

  2. 1234563 ATG 请求选项中的 cookie 并发出请求。

3.注销时我会清除cookie并删除token。

通过在 jwt 有效负载中生成带有用户登录信息的 JWT 令牌,我已成功实现了此场景的 JWT。使用 hapi-jwt-auth2。

POC-2(维护访客 Cookie),

  1. 我的 API 将有端点 /auth/generatesession,它又会返回一个 64 字节的随机令牌(我们为此使用 rand-token npm 模块),该令牌将在 24 小时内过期。

  2. 所有方法都需要在授权标头中将访问令牌传回给我,我会将令牌 ttl 延长到 24 小时。

  3. 1234563 .

问题:

  1. 我应该在第二种情况下使用 JWT 吗?如果是这样,
  2. 如何为第二种情况实施 JWT? (因为,不知道用户是谁?)
  3. 有人认为这样编写代理服务器是个好主意吗?
  4. 如何使用 ATG session Expiry 简化此令牌的会话到期?
  5. 有人这样使用 Node.js 吗?它是如何扩展的?
  6. 如果有人愿意告诉我如何编写这个代理服务器,那对我很有帮助。

抱歉,如果这个问题太长,只是我的解释方式。

提前致谢。

【问题讨论】:

    标签: javascript node.js proxy


    【解决方案1】:
    1. 当然,为什么不呢?
    2. 您不一定需要用户。 JWT 存储任意数据,用户名可以为空白或匿名。如果用户登录它并提供与访客购物车相关联的令牌,则可以假定该用户被允许认领该购物车的内容,并且可以销毁匿名购物车。
    3. 当然,这很常见(免责声明:我从事的工作与您非常相似)。
    4. TTL 是合理的,但我不知道 ATG 是什么,也不知道它是如何处理的。
    5. 是的。只要您确保您的服务器是无状态的,并且您通过 Redis 之类的工具管理所有状态,它就可以很好地扩展。
    6. 这个问题太宽泛了,我只会使用 Express + Redis/Mongo/Postgres。

    【讨论】: