2011-10-12 69 views
11

我想利用身份驗證通過HTTPS基本身份驗證我servicestack.net其他服務的用戶。如何通過HTTPS實現ServiceStack.net休息呼叫?

誰能解釋如何的這個https部分會工作或點我在正確的方向?客戶有責任確保通過https進行通話嗎?我是否需要執行任何涉及SSL證書的操作來啓用此功能?

這項服務將最有可能生活在AppHarbor如果該事項。

編輯

誰能舉如何在服務棧實現這一目標的具體實例。我認爲我會讓我的API中的所有服務都需要HTTPS。我可以使用請求過濾器來完成此操作嗎?

+0

我並沒有進行修改,但你可能要詢問一個後續問題或用appharbor標記這個問題以提醒appharbor社區,它們非常有用。 – Dan

回答

8

你需要有一個SSL證書購買和安裝處理HTTPS(你應該能夠得到一個從您的域名提供商,它然後你會需要安裝您的託管服務器上)。服務客戶通常可以通過他們選擇的任何方法進行連接。如果他們試圖通過http進行連接,而不是允許他們訪問,則停止請求並向客戶端生成錯誤消息將是您的責任。

您可以驗證他們是否是在HTTP或HTTPS通過檢查你的REST服務API在Request.Url.Scheme財產。通常,對需要https的服務的http請求將返回HTTP 403(禁止)狀態碼。如果你有機會到IIS,你可以強制HTTPS輕鬆而不做任何編碼:http://www.sslshopper.com/iis7-redirect-http-to-https.html

+2

感謝您的信息。我想我需要更多的信息在servicestack.net中專門實現這一點。就我所知,我無法通過appharbor訪問IIS中的這些設置。 – stephen776

+0

@ stephen776-是否可以在servicestack上實現這一點?鑑於這是幾年前,您對SS和https的體驗如何? –

2

如果你並不需要的所有服務,在需要安全的任何服務的頂部以下不工作:

if (!Request.IsSecureConnection) 
    { 
     throw new HttpError(HttpStatusCode.Forbidden,"403","HTTPS ONLY"); 
    } 

但是最好是這是一個過濾器屬性:https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes

如果你想全局,你可以在你的屬性應用到共享BaseService或更好的使用全局過濾器:https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters

......像這樣:

this.GlobalRequestFilters.Add((req, res, dto) => 
{ 
    if (!req.IsSecureConnection) 
    { 
     res.StatusCode = (int)HttpStatusCode.Forbidden; 
     res.Close(); 
    } 
}); 

如果你想要一個重定向到https,而不是拒絕請求,那麼你可以將它基於這樣的:http://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers