我们的 Rest API 经过笔测试,HSTS 错误仅在 swagger 生成的 index.html 上返回。
它是一个.net core 6 REST Api,并且端点都返回有效响应,它仅在swagger生成的index.html上。
在我的program.cs中,我有以下设置:
internal static void SetupSecurity(this IServiceCollection services)
{
SecurityConfiguration securityConfiguration = services
.BuildServiceProvider()
.GetConfigurationData<SecurityConfiguration>();
if (securityConfiguration.UseSSL)
{
services
.AddHsts(options =>
{
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(securityConfiguration.MaxAge);
})
.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = (int)HttpStatusCode.TemporaryRedirect;
options.HttpsPort = securityConfiguration.HttpsPort;
});
}
}
在我的program.cs中,这是通过执行services.SetupSecrity和app.SetupSecurity来调用的,但这仅适用于端点,而不适用于swagger html(这是有道理的)。
还有其他人经历过这种情况吗?如果有,解决这个问题的最佳解决方案是什么?我似乎找不到任何地方可以让我注入 swagger 生成的 html 页面来添加相关的响应标头。
我不能只将其添加到 IIS 中,因为端点会返回多个标头,这似乎不正确。我可以将其从代码中完全删除,但这会导致需要大量技术支持来更新客户的安装。
您问题中的代码显示了如何配置和注册必要的服务。这里重要的是它们在 ASP.NET 管道中应用的顺序。
在调用 UseSwaggerUI
之前,请确保您已调用
app.UseHsts()。
来自文档
添加用于使用 HSTS 的中间件,这会添加 Strict-Transport-Security 标头。
if (!env.IsDevelopment())
{
app.UseHsts();
}
app.UseHttpsRedirection();
// ....
app.UseSwagger();
app.UseSwaggerUI();