在 Swagger index.html 中添加 HSTS 标头

问题描述 投票:0回答:1

我们的 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 中,因为端点会返回多个标头,这似乎不正确。我可以将其从代码中完全删除,但这会导致需要大量技术支持来更新客户的安装。

.net-core swagger swagger-ui
1个回答
0
投票

您问题中的代码显示了如何配置和注册必要的服务。这里重要的是它们在 ASP.NET 管道中应用的顺序。

在调用 UseSwaggerUI 之前,请确保您已调用

app.UseHsts()

来自文档

添加用于使用 HSTS 的中间件,这会添加 Strict-Transport-Security 标头。

if (!env.IsDevelopment())
{
    app.UseHsts();
}

app.UseHttpsRedirection();

// ....

app.UseSwagger();
app.UseSwaggerUI();
© www.soinside.com 2019 - 2024. All rights reserved.