我有一个使用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文件中设置的内容。
答案 0 :(得分:2)
您可以安全地在web.config中设置所有配置。 OWIN包适用于那些喜欢使用启动类而不是web.config的人。
如果你应该配置,例如在web.config和中间件中的HSTS,首先根据web.config在响应中设置标头。中间件将在管道中稍后运行,并将根据OWIN配置设置标头,而不考虑web.config中的内容。因此,在两个位置配置标头时,中间件都会获胜。
为了完成此答案:如果使用MVC属性覆盖基本配置,则在计算生成的配置时,将通过web.config选择特定标头的OWIN配置。所以OWIN在所有情况下都胜过web.config。