【问题标题】:How to set secure cookie using heroku + node.js + express?如何使用 heroku + node.js + express 设置安全 cookie?
【发布时间】:2013-01-06 00:04:25
【问题描述】:

我有一个在 Cedar 堆栈上运行的 node.js 应用程序,我很困惑为什么安全 cookie 不起作用。

"express": "3.0.3",
"node": ">=0.8.14",

...
app.use(express.session({
        secret : 'somesecret',
        store : // store works fine, sessions are stored
        key : 'sid',
        cookie : {
            secure : true, // it works without the secure flag (cookie is set)
            proxy : true,  // tried using this as well, no difference
            maxAge: 5184000000 // 2 months
        }
}));
...

在 localhost 上一切正常,但在 heroku 上我似乎无法设置安全 cookie。我究竟做错了什么? docs 说负载均衡器终止 SSL,是否需要在那里配置?
非常感谢

【问题讨论】:

    标签: node.js cookies heroku express


    【解决方案1】:

    如果您使用的是cookie-session,它应该如下所示:

    app.use require('cookie-session') 
       secret: '<secret>'
       secureProxy: true
    

    【讨论】:

      【解决方案2】:

      解决方案

      问题是我把proxy: true设置错了,应该是这样的:

      ...
      app.enable('trust proxy'); // optional, not needed for secure cookies
      app.use(express.session({
          secret : 'somesecret',
          store : ..., // store works fine, sessions are stored
          key : 'sid',
          proxy : true, // add this when behind a reverse proxy, if you need secure cookies
          cookie : {
              secure : true,
              maxAge: 5184000000 // 2 months
          }
      }));
      ...
      

      如果您想在 Heroku 托管应用程序的某处使用 req.protocol,请同时添加 @friism 建议的 app.enable('trust proxy');。

      【讨论】:

      • 您不应该使用信任代理的额外选项来限制它只信任第一个/第一个代理/代理或其他东西吗?
      • 如果必须,您可以更精细地控制信任。那时,我认为 express 3.0.3 没有记录这一点,我也不担心安全方面,但可以肯定的是,proxy-addr 包为您提供了这种级别的控制。
      【解决方案3】:

      您是正确的,Heroku 在 SSL 到达您的应用程序之前终止了它。这会导致 express 看到非 ssl 流量,这可能是它在 Heroku 上运行时拒绝设置 cookie 的原因。

      Heroku 使用原始协议设置 X-Forwarded-Proto 标头。我没有对此进行测试,但根据文档,您必须通过将trust proxy 设置为记录的here 来告诉express 尊重该标头中的信息。在req.protocolhere 下找到更多详细信息。

      【讨论】:

      • 谢谢,您必须明确表示是对的。我想我放错了“代理”属性,它是用于会话选项的,但我把它放在 cookie 中 => 错误。
      • 即使trust proxy 设置与cookie 处理不 相关,我也会接受这个指出Heroku 终止SSL 连接的影响的答案。一旦允许,我也会发布我的固定代码。
      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2011-08-13
      • 2021-09-05
      • 2016-09-11
      • 1970-01-01
      相关资源
      最近更新 更多