2014-11-05 61 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