【问题标题】:RequireHttpsAttribute with .NETCore RC2 causes HTTP302 redirect loop on Azure.NET Core RC2 的 RequireHttpsAttribute 导致 Azure 上的 HTTP 302 重定向循环
【发布时间】:2016-06-21 21:21:52
【问题描述】:

我一直在尝试让 .NETCore RC2 Web 应用在 Azure 上使用 RequireHttpsAttribute 集运行,但我遇到了问题。

为了消除这是我在代码中引入的问题的可能性,我将内容缩减到最低限度并使用“开箱即用”的 VS2015 .NETCore RC2 模板重新创建它。

如果我部署标准 VS2015 .NETCore RC2 Web 应用程序,该网站运行良好。如果我随后将 [RequireHttps] 添加到控制器中,它在本地可以正常工作,但在 Azure 上会导致 HTTP302 重定向循环。这似乎是自 RC1 以来发生的变化,因为 RequireHttpsAttribute 在带有 RC1 的 Azure 中运行良好。

这里有一个类似的问题:HTTP Error 310 ERR_TOO_MANY_REDIRECTS with RequireHttpsAttribute ASP.NET Core,但不清楚问题是在谈论 RC1 还是 RC2(我实际上怀疑是 RC2),但唯一的答案仅适用于 RC1。

这里有一个关于此属性导致 AWS 上的重定向循环的类似问题:RequireHttps causes redirect loop on Amazon Elastic Load Balancer 但那是 MVC4 并且还提到了 Azure 不使用的标头。

【问题讨论】:

  • 您需要 HTTP 到 HTTPS 的永久重定向吗?
  • 有点。 RequireHttps 属性的重点在于它是一个授权过滤器,用于确认通过 HTTPS 接收请求。如果不是,并且它是一个 GET,它会重定向到 URI 的 HTTPS 版本。如果它不是 GET,那么它将返回 HTTP403。令人担忧的是,这是 .NET 的标准部分,但出于某种原因,Azure 认为 HTTPS 请求是 HTTP,因此将 HTTPS 请求重定向到导致重定向循环的 HTTPS 端点
  • 查看该属性的代码,看起来 filterContext.HttpContext.Request.IsHttps 必须返回 false 而应该为 true
  • 为了证明这一点,这是标准的Core RC2模板,我刚刚添加了Request.IsHttps、Request.Host.ToString()、Request.Method、Request.Protocol和Request.Scheme到标记 - IsHttps 返回 false。 Request.Scheme 返回 http,即使它实际上是 https:corerc2httpstest.azurewebsites.net/Home/About

标签: azure redirect azure-web-app-service asp.net-core-1.0 .net-core-rc2


【解决方案1】:

目前在 Azure 和 ASP.NET Core RC2 中有一个 bug,它与 Kestrel 和 IIS 的连接方式以及表明它是否是 HTTPS 请求的 HTTPS 标头有关。

我知道它可能很快会在 RTM 上得到解决,因为该错误已标记为完成。

我们的解决方法是使用web.config 将任何 HTTP 请求永久重定向到 HTTPS。我们使用dotnet-transform 包仅在发布时插入重定向(因此在本地开发环境中它不适用)。如果您需要它作为仅供参考,这是可选的。

【讨论】:

  • 看起来就是这个问题...我稍后会检查并报告!谢谢指点!
【解决方案2】:

您可以通过将以下行添加到 Startup.cs 中的 ConfigureServices 来解决此问题(并添加“使用 Microsoft.AspNetCore.HttpOverrides;”)

services.Configure<ForwardedHeadersOptions>(options =>
        {
            options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
        });

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2017-06-14
    • 2015-04-19
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多