使用iisnode时安全CookieSession

Alv*_*aro 2 iis cookies session-cookies node.js iisnode

我通过使用iisnode使用IIS节点,我遇到了设置CookieSession选项的麻烦secure:true.

我在IIS上使用HTTPS,我将任何HTTP重定向到HTTPS.但即便如此,如果我设置了CookieSession选项secure:true,则会话在登录后将不会有任何内容.

secure:一个布尔值,指示cookie是否仅通过HTTPS发送(HTTP默认为false,HTTPS默认为true).

我被迫使用secure:false它来使它工作.为什么?

Chr*_*eek 5

原因

iisnode代理从IIS到运行express的节点应用程序的请求.ssl连接在IIS终止,您的节点应用程序收到http请求.当应用程序通过安全连接需要cookie时,cookieSessionexpress-session将不会设置cookie.

解析度

x-forwarded-proto标题设置为"https" 时,您需要告诉Express它可以信任代理.

您可以通过添加proxy:true config来完成此操作

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

或者您可以告诉Express全球信任代理:

app.set('trust proxy', 1)
Run Code Online (Sandbox Code Playgroud)

enableXFF在web.config中也设置为true.它使iisnode将x-forwarded-proto(和x-forwarded-for)请求标头添加到Express应用程序.

<configuration>
  <system.webServer>

    <!-- ... -->

    <iisnode enableXFF="true" />

  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

PREREQUISITE

iisnode至少需要0.2.11版才能让enableXFF配置添加x-forwarded-proto请求HTTP头.您可以通过查看iisnode.dll可能安装的文件的属性来检查您拥有的iisnode版本C:\Program Files\iisnode.如果它<0.2.11,只需从此处的任何下载链接下载最新版本.安装后,它会告诉您需要重新启动服务器.我可以告诉你,一个iisreset命令(在一个高架的cmd盒子里)就足够了.