【问题标题】:Secure CookieSession when using iisnode使用 iisnode 时的安全 CookieSession
【发布时间】:2016-02-25 13:33:06
【问题描述】:
我通过使用 iisnode 将节点与 IIS 一起使用,但在设置 CookieSession 选项 secure:true 时遇到问题。
我在 IIS 上使用 HTTPS,并将任何 HTTP 重定向到 HTTPS。
但是即使这样,如果我设置CookieSession选项secure:true,登录后会话将没有任何内容。
安全:一个布尔值,指示 cookie 是否仅通过 HTTPS 发送(HTTP 默认为 false,HTTPS 默认为 true)。
我不得不使用secure:false 来使它工作。为什么会这样?
【问题讨论】:
标签:
node.js
iis
cookies
session-cookies
iisnode
【解决方案1】:
原因
iisnode 代理从 IIS 到运行 express 的节点应用程序的请求。 ssl 连接在 IIS 处终止,并且您的节点应用程序收到一个 http 请求。当应用通过安全连接需要 cookie 时,cookieSession 和 express-session 不会设置 cookie。
分辨率
当x-forwarded-proto 标头设置为“https”时,您需要告诉 Express 它可以信任代理。
您可以通过添加代理来做到这一点:真正的配置
app.use(express.session({
proxy : true,
secret: 'your-secret-key',
cookie: {
secure: true
}
}));
或者您可以告诉 Express 全局信任代理:
app.set('trust proxy', 1)
还要在 web.config 中将 enableXFF 设置为 true。它使 iisnode 将 x-forwarded-proto(和 x-forwarded-for)请求标头添加到 express 应用程序。
<configuration>
<system.webServer>
<!-- ... -->
<iisnode enableXFF="true" />
</system.webServer>
</configuration>
先决条件
iisnode 至少需要 0.2.11 版本才能让 enableXFF 配置添加 x-forwarded-proto 请求 HTTP 标头。您可以通过查看可能安装在C:\Program Files\iisnode 中的iisnode.dll 文件的属性来检查您拥有的iisnode 版本。如果它是 here 下载最新版本。安装后它会告诉您需要重新启动服务器。我可以告诉你,iisreset 命令(在提升的 cmd 框中)就足够了。