首页 > 解决方案 > Express.js 会话 cookie 不适用于 CloudFront 中的 secure=true

问题描述

为了让我的 webapp 准备好投入生产,我想将会话 cookie 属性“安全”从 false 设置为 true。该应用程序由 Aws 托管,构建如下:

Route53 -> CloudFront -> ELB(无集群,只有 SingleApp)

CloudFront 用于使应用程序可以通过 SSL 访问。Nodejs 应用程序侦听 HTTP 端口。不幸的是,没有设置 SessionCookie。

如果我将安全设置为 false,则登录有效并且会话 cookie 已设置。所以它似乎只取决于这个属性。我还将“信任代理”设置为 true,但不幸的是没有成功。

Express.js:

const ExpressApp=express();
ExpressApp.set("trust proxy", (ip)=>{
    return true;
  });
...

会议:

  const expiryDate = new Date( Date.now() + 60 * 60 * 1000 ); // 1 hour
        return session({
            genid: (req) => {
                return uuid() // use UUIDs for session IDs
            },
            secret: process.env.SESSION_SECRET,
            resave: false,
            saveUninitialized: true,        
            proxy:true,    
            store: new MongoStore({ mongooseConnection: mongoose.connection }),
            rolling: true,
            cookie:{
                secure:true,
                httpOnly:true,
                expires: expiryDate
            }
        })

CloudFront: https ://pasteboard.co/Ib9mTED.png

标签: node.jsexpressamazon-cloudfront

解决方案


推荐阅读