In my last post, I described an ASP.NET Web Api RequireHttps attribute that supports SSL terminated at a load balancer like Amazon’s ELB. Here’s a RequireHttps attribute for ASP.NET MVC with load balancer support:
using System;
using System.Configuration;
using System.Web.Mvc;
using System.Web;
using System.Collections.Generic;
namespace MvcHelpers
{
public class RequireHttpsSupportsLBAttibute : RequireHttpsAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsSecureConnectionConsideringLoadBalancer()) return;
base.OnAuthorization(filterContext);
}
}
public static class HttpRequestBaseHelper
{
public static bool IsSecureConnectionConsideringLoadBalancer(this HttpRequestBase request)
{
return request.IsSecureConnection || LoadBalancerSecured(request);
}
public static bool LoadBalancerSecured(HttpRequestBase request)
{
if (string.Equals(request.Headers["X-Forwarded-Proto"],
"https"
StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
return false;
}
}
}