如何将JWT用于使用Node.js编写的代理服务器?

时间:2015-09-17 19:02:26

标签: javascript node.js proxy

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

我不确定,这是提出这个问题的正确位置。但我可能需要这个大社区的想法。所以让我解释一下我要做的事情。

服务器配置:

  1. Node.js - 4.0.0
  2. Hapi.js - 10.0.0
  3. Redis的
  4. 情景:

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

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

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

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

    (我们很多人都知道,匿名cookie是什么,无论如何让我解释一下,如果我说出一个词 - Guest Checkout。有很多方法可以解决这个问题。但是我的商业后端是这样实现的,当我们去网站,你把商品添加到购物车并检查那些没有登录的项目吗?这就是在我们添加项目的时候会发生什么,它们只存储在你的浏览器cookie中,它不存储在持久数据库中,无论如何用户想要登录/注册到从浏览器检索cookie并存储在数据库中的帐户(基本上该匿名购物车被转移到登录用户。)

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

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

    2. 现在每当他们调用任何api方法时,他们都应该在授权标头中发送令牌,我将检查令牌有效性并再次展开ttl 1小时并检索与该令牌相关的cookie,设置ATG中的cookie请求选项并提出请求。

    3. 3.在注销时,我将清除cookie并删除令牌。

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

      POC-2(维护访客Cookie),

      1. 我的API将有endpoint / auth / generatesession,而后者将返回一个64字节的随机令牌(我们正在使用rand-token npm模块),它将在24小时后到期。

        < / LI>
      2. 所有方法都需要访问令牌在授权标头中传回给我,我会将该令牌ttl扩展到24小时。

      3. 现在他们可以调用任何api方法,比如addtocart或其他东西,甚至在将项目添加到购物车后,突然他们想要登录或者我可以使用他们的访客会话cookie并在成功登录后将该购物车转移到持久数据库。

      4. 问题:

        1. 我应该在第二种情况下使用JWT吗?如果是的话,
        2. 如何为第二个场景实现JWT? (因为,不知道谁是用户?)
        3. 有人认为这样编写代理服务器是个好主意吗?
        4. 如何使用ATG会话Expiry简化此令牌的会话到期时间?
        5. 有没有人像这样使用Node.js?它是如何扩展的?
        6. 如果有人想让我知道如何编写这个代理服务器,那对我来说会很有帮助。
        7. 我道歉,如果这是一个太长的问题,那就是我解释事情的方式。

          提前致谢。

1 个答案:

答案 0 :(得分:1)

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