当同时使用NWebSec.Mvc和NWebSec.OWIN时,我是否需要在2个位置配置安全性?

时间:2015-07-22 13:25:14

标签: asp.net-mvc security owin hsts nwebsec

我有一个使用ASP.NET Identity v2的ASP.NET MVC 5站点。我正试图用NWebSec“强化”它。

因为该站点使用MVC和Owin,所以我安装了NWebSec.MVC和NWebSec.OWIN NuGet包。

阅读文档,可以通过配置文件为NWebSec / MVC设置许多选项,并且可以通过Startup.cs文件在代码中为NWebSec.OWIN设置一些相同的选项。

例如,要添加HSTS,我可以在web.config中执行以下操作:

  <nwebsec>
    <httpHeaderSecurityModule xmlns="http://nwebsec.com/HttpHeaderSecurityModuleConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NWebsecConfig/HttpHeaderSecurityModuleConfig.xsd">
      <securityHttpHeaders>
        <strict-Transport-Security max-age="365" includeSubdomains="true" httpsOnly="false" preload="true" />
      </securityHttpHeaders>
    </httpHeaderSecurityModule>
  </nwebsec>

...和/或startup.cs中的以下内容:

    public void Configuration(IAppBuilder app)
    {
        this.ConfigureAuth(app);

        app.UseHsts(o => o.MaxAge(365).IncludeSubdomains().AllResponses().Preload());
    }

我的问题是:我是否必须在两个地方设置所有选项 - 或者只在一个地方设置(在这种情况下哪个更好)?

我更喜欢在web.config文件中进行所有配置,但我不确定这是否会遗漏一些需要在Startup.cs文件中设置的内容。

1 个答案:

答案 0 :(得分:2)

您可以安全地在web.config中设置所有配置。 OWIN包适用于那些喜欢使用启动类而不是web.config的人。

如果你应该配置,例如在web.config和中间件中的HSTS,首先根据web.config在响应中设置标头。中间件将在管道中稍后运行,并将根据OWIN配置设置标头,而不考虑web.config中的内容。因此,在两个位置配置标头时,中间件都会获胜。

为了完成此答案:如果使用MVC属性覆盖基本​​配置,则在计算生成的配置时,将通过web.config选择特定标头的OWIN配置。所以OWIN在所有情况下都胜过web.config。