2017-03-02 31 views
0

我已經在Microsoft Azure abc.com上託管了我的REST api,並且我只想從xyz.com接收基於HTML的頁面的調用。使用c查找哪個主機已被REST api請求#

有沒有什麼辦法可以找到xyz.com發送的REST請求,或者任何其他簡單的方法來保護基於html的消費者的rest api?

使用MVC,ASP.NET

回答

0

最簡單的方法是檢查您收到的HTTP請求,檢查Referer標頭,在這個問題詳述:

How do I get the referrer URL in an ASP.NET MVC action?

問題它不是100%安全的,因爲Referer頭可能被欺騙,如果有人決定繞過它。

另一種方法是添加基於IP的過濾器,阻止僅映射到xyz.com的IP的傳入請求,但這完全取決於您如何託管您的網站 - 虛擬機位於天藍色,託管網站或其他內容。

+0

謝謝。我會試一試。其基於Azure的網站。我試過公共或開放的datapower網站誰可以提供客戶端/祕密密鑰,然後令牌,但無法找到。你碰巧知道任何可用於公衆而不是企業的服務? –

1

無論您的後端是C#,您都可以使用訪問控制 - 允許來源 HTTP標頭將xyz.com指定爲允許的推薦鏈接。

您必須指定Vary:來源標題Access-Control-Allow-Origin是通配符以外的任何其他名稱。這「表示[S]到客戶端服務器的響應會有所不同基於起源請求頭的值」

您可以瞭解更多關於此頭和它是如何工作在不同的場景在本SO回答:https://stackoverflow.com/a/10636765/1449160

參見:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

然而,這是不夠安全,CORS是一個客戶端實現的功能。您可能希望您的C#後端檢查引薦來源,作爲您的訪問控制的一部分。這是另一個SO問題,其答案涉及這個問題:Getting the HTTP Referrer in ASP.NET

最後,爲了確保您的API免受未經授權的訪問,有很多方法可以做到這一點,這將超出幾個段落的範圍。 OAuth可能是最爲人熟知的,但您也可以爲您的客戶端生成唯一的令牌並將其包含在標頭中或使用您的令牌的HTTP基本身份驗證作爲用戶名或密碼等。

+0

正如@Avner Shahar-Kashtan所提到的,引用者URI也可能被欺騙,所以即使這樣也不足以保證安全。您可能需要您的CORS頭文件,後端引用程序檢查以及某種類型的身份驗證令牌,以確保您的API安全。 –

+0

謝謝山姆!我會試一試。並更新。 –