2014-11-06 61 views
1

對於網站登錄,我正在使用ServiceStack的身份驗證功能以及Authenticate屬性,CredentialsAuthProvider和UserAuth存儲庫。然而,在生產中,我們將所有IIS主機放在僅通過設計提供HTTPS服務的負載平衡器後面(將端口443上的所有請求轉發到IIS實例上的端口80),這種方法運行良好。這就產生了一個問題 - Authenticate屬性僅重定向到HTTP端口80上的登錄頁面(我認爲是因爲它只能看到代理請求Url,而不是原來的)。這會導致瀏覽器中的請求失敗,因爲負載平衡器不會執行HTTP並且不會將HTTP請求重定向到HTTPS。我們無法將IIS配置爲僅限HTTPS。使用ServiceStack身份驗證,有沒有辦法讓重定向始終是HTTPS?

有沒有辦法使Auth提供程序中的重定向始終爲HTTPS?或者,Auth提供程序可以查看X-Forwarded-Proto的HTTP標頭以查看登錄頁面請求是否應該通過HTTPS?

回答

1

下面是從傑米斯貝洛特在ServiceStack客戶論壇回覆:

一些OAuth的網址在配置中指定: https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#oauth-configuration

對於其他自動生成的URL可以將其設置爲使用https:

SetConfig(new HostConfig { 
    UseHttpsLinks = true 
}); 

哪個應該修改最新的v4.0.33版本中使用的BaseUrl。

您還可以覆蓋AppHost. ResolveAbsoluteUrl方法到 introspect/customize url。

而且我實施AppHost.ResolveAbsoluteUrl覆蓋

public override string ResolveAbsoluteUrl(string virtualPath, IRequest httpReq) 
{ 
    virtualPath = virtualPath.SanitizedVirtualPath(); 
    var absoluteUrl = httpReq.GetAbsoluteUrl(virtualPath); 

    return httpReq.Headers["X-Forwarded-Proto"] != null 
     && httpReq.Headers["X-Forwarded-Proto"].Equals("https", StringComparison.InvariantCultureIgnoreCase) 
     ? absoluteUrl.Replace("http://", "https://") : absoluteUrl; 
} 

(負載平衡器和實例都在AWS的方式)

相關問題