我使用iisnode将node与iis一起使用,并且在设置cookiesession选项secure:true时遇到问题。
我在iis上使用https,并将任何http重定向到https。
但即使这样,如果我设置CookieSession选项secure:true,会话在登录后也不会有任何内容。
安全:一个布尔值,指示cookie是否只通过https发送(http默认为false,https默认为true)。
我被迫使用secure:false来实现它。为什么?

最佳答案

原因
iis node将来自iis的请求代理到运行express的节点应用程序。SSL连接在IIS上终止,并且您的节点应用程序接收到一个HTTP请求。当应用程序需要通过安全连接使用cookie时,cookieSessionexpress-session将不会设置cookie。
分辨率
x-forwarded-proto头设置为“https”时,您需要告诉express它可以信任代理。
可以通过添加代理:true config

app.use(express.session({
  proxy : true,
  secret: 'your-secret-key',
  cookie: {
    secure: true
  }
}));

或者您可以告诉Express在全球范围内信任代理:
app.set('trust proxy', 1)

也可以在web.config中将enableXFF设置为true。它使iInsnode向Express应用程序添加x-forwarded-proto(和x-forwarded-for)请求头。
<configuration>
  <system.webServer>

    <!-- ... -->

    <iisnode enableXFF="true" />

  </system.webServer>
</configuration>

先决条件
iisnode至少需要0.2.11版本才能让enableXFF配置添加x-forwarded-proto请求http头。通过查看iisnode.dll中可能安装的C:\Program Files\iisnode文件的属性,可以检查iisnode的哪个版本。如果here下载最新版本。安装后它会告诉您需要重新启动服务器。我可以告诉您一个iisreset命令(在提升的命令框中)就足够了。

关于node.js - 使用iisnode时保护CookieSession,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33871133/

10-10 14:34