Asp.net-Mvc

RequireHttps 導致 Amazon Elastic Load Balancer 上的重定向循環

  • June 24, 2016

我有一個在 Amazon 的彈性負載均衡器後面執行的 ASP.NET MVC 4 應用程序。當我在負載均衡器Web 伺服器上安裝 SSL 證書並在 Web 伺服器層終止 SSL 時,一切正常。

但是,當我嘗試在負載均衡器層終止,將內部流量從負載均衡器轉發到埠 80 上未加密的 Web 伺服器時,RequireHttps 屬性會導致重定向循環。這似乎是有道理的,因為它正在請求一個加密通道並且不知道它正在獲取一個(在瀏覽器和負載平衡器之間)。有沒有人遇到過同樣的問題?任何建議,將不勝感激!

編輯:解決方案

以下連結可能對遇到此問題的其他人有用:

MVC3、RequireHttps 和自定義處理程序導致 http 310

https://gist.github.com/915869

似乎要在 AWS 上使用此功能,您需要查看“X-Forwarded-Proto”HTTP 標頭項。如果初始請求是 HTTPS,負載均衡器會注入標頭並顯示“https”。如果是 HTTP,它會顯示“http”。

在這裡找到答案:http: //aws.typepad.com/aws/2010/10/keeping-customers-happy-another-new-elastic-load-balancer-feature.html

我遇到了同樣的問題,我發現以下 RequireHttpsAttribute 過濾器對我有用。

public class SSLFilter : RequireHttpsAttribute
{
   public override void OnAuthorization(AuthorizationContext filterContext)
   {
       if (filterContext == null)
       {
           throw new ArgumentNullException("filterContext");
       }

       if (filterContext.HttpContext.Request.IsLocal ||
           (filterContext.RequestContext.HttpContext.Request.Headers.AllKeys.Contains("X-Forwarded-Proto") &&
           filterContext.RequestContext.HttpContext.Request.Headers.Get("X-Forwarded-Proto").ToLower().Equals("https")))
       {
           return;
       }

       base.OnAuthorization(filterContext);
   }
}

引用自:https://stackoverflow.com/questions/12144219