【发布时间】:2014-11-11 07:27:39
【问题描述】:
我有以下属性来确保远程站点页面以 https 模式打开。
public class RemoteRequireHttpsAttribute : RequireHttpsAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentException("Filter Context");
}
if (filterContext != null && filterContext.HttpContext != null)
{
if (filterContext.HttpContext.Request.IsLocal)
{
return;
}
else
{
string val = ConfigurationManager.AppSettings["RequireSSL"].Trim();
bool requireSsl = bool.Parse(val);
if (!requireSsl)
{
return;
}
}
}
base.OnAuthorization(filterContext);
}
}
本地开发现在可以正常工作,因为我不希望它以 https 模式打开。
开发站点以 https 模式打开页面 - 此处没有问题(单节点)。
我当前设置的生产(负载平衡 - 2 个节点)站点出现以下错误。请注意,开发和生产站点具有相同的设置和 web.config
页面未正确重定向
Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。
此问题有时可能是由禁用或拒绝接受 cookie 引起的。
开发网站网址就像 http://dev.datalab.something.org
产品网站网址就像 http://datalab.something.org
这是电话
[RemoteRequireHttps]
public ActionResult Index(string returnUrl, string error)
我在这里错过了什么?
更新 1: 我的管理员已确认 SSL 终止已在 lad balancer 级别设置。我查看了 iis 站点设置,但没有看到 https 绑定。我只看到http绑定。他是否也需要设置 https 绑定?
更新 2:@AlexeiLevenkov 为我指出了正确的方向,this post 拥有我使用的代码并且它正在运行。将代码移动到单独的答案中。
【问题讨论】:
-
您似乎没有将用户重定向回 HTTPS 连接,您只是拒绝访问?
-
您有某种无限循环,您的页面被来回重定向。使用浏览器的调试工具来确定它在哪些页面之间跳转,然后检查这些页面的配置/代码。
-
RemoteRequireHttps 继承自 RequireHttpsAttribute。这会进行重定向。 @mason 我在开发和产品站点上都有相同的代码。开发站点以 https 模式显示页面就好了。没有重定向问题。此操作仅应用一个属性。
-
查看 IIS 日志中的传入请求...我很有可能所有这些都是 HTTP,因为您的服务器之前的某处有 SSL termination。
-
@learning ......这里的大部分答案 - “那个产品是负载平衡的。”当您检查负载平衡器是否配置为执行 SSL 终止时,其余的就会清楚了。改为阅读"x-forwarded-proto" 标题,您的生活会很美好。
标签: c# asp.net-mvc-5