2014-11-05 36 views
2

我们正在使用ASP.NET Web Helpers Library 3.2.2Nuget Link)正在开发一个Web应用程序,该应用程序将在亚马逊上运行在一个Elastic负载平衡器(ELB)。如何使Microsoft.Web.Helpers.ReCaptcha与X-Forwarded-Proto合作

看起来ELB和Web服务器之间发送的所有请求都是未加密的。这会导致context.Request.IsSecureConnection为false。

就浏览器而言,请求是安全的,它会显示https://并按预期方式通过端口443。

Web Helper Library中的以下代码在预期所有资源的安全连接时都会导致一些浏览器警告/错误。

UrlBuilder urlBuilder = 
    new UrlBuilder(context.Request.IsSecureConnection 
     ? "https://www.google.com/recaptcha/api" : 
      "http://www.google.com/recaptcha/api"); 

问题:如果我能做些什么呢?如果没有用本土的ReCaptcha助手替换这个助手,有什么办法可以强制context.Request.IsSecureConnection在浏览器和ELB之间是安全连接时是真的吗?

我们使用context.Request.Headers["X-Forwarded-Proto"]来确定它是否在我们有控制权的其他地方的安全连接上。

+0

什么使用你的问题中包含的UriBuilder?它是作为响应重定向返回到浏览器还是该库在内部调用对该地址的Web请求? – 2014-11-05 20:41:37

+0

它被用于生成放置在网页上的ReCaptcha嵌入代码。它会以该urlBuilder的字符串表示形式作为源创建一个iframe。 – 2014-11-05 20:44:33

回答

2

只要它将嵌入代码呈现给一个字符串,然后在包含proto头部(或将其设置为HTTPS)中操作字符串以更改URL。

+0

谢谢。这可能是我正在寻找的解决方案。明天会试用。 – 2014-11-05 21:45:08

+0

很多时候它总是最简单的解决方案,即使不是“漂亮”或“优雅”也是最好的 – 2014-11-06 14:30:14

+1

有时最简单的解决方案很难看清。 :)谢谢,它的工作。 – 2014-11-07 19:51:00