2012-02-13 114 views
0

我的網站無需登錄。以及用戶在調用ASP.NET MVC Controller Action Methods時所採取的行動。任何其他公司都可以在這個時候調用這些端點,並以這種方式使用我的API。我想確保只有在我網站上的用戶才能訪問這些API。如何將訪問者限制爲訪問我網站的訪問者

我該如何做到這一點?

添加說明:

說我的網站是consoto.com。我希望我的方法僅在最終用戶位於consoto.com上時才能使用。現在,如果另一家公司或黑客建立一個網站hacra.com並在他們的javascript中調用我的方法,我希望它失敗,因爲他們的用戶不在consoto.com上,而是在hackLand.com上。

現在很多網站都提供付費官方API訪問其核心功能。如果他們沒有實現這樣的機制,其他人可以選擇調用實際網站使用的方法,而不是通過付費API。什麼會阻止hackland.com使用consoto.com使用的方法,並最終不支付該服務費用?

+0

你是什麼意思「任何其他公司」和什麼API?但你可以爲你的網站設置一個cookie或會話並檢查cookie或會話,因爲你的網站是唯一可以讓你完成交易的會話,但我不認爲你的網站僅限於公司 – davethecoder 2012-02-13 00:11:56

+0

如果你不要求客戶登錄(或以某種方式驗證自己(即祕密令牌,授權cookie等),那麼您如何可靠地區分「網站上的用戶」和「其他公司」? – 2012-02-13 01:00:50

+0

@ minus4我剛剛添加了一個更好的解釋。謝謝! – Barka 2012-02-13 19:17:50

回答

0

我不是%100肯定我理解你,但是,你似乎只想給你的網站上的活躍用戶調用某些操作方法的能力。如果是這種情況,你可以用[ChildActionOnly]來修飾動作方法。這將強制ASP僅允許在視圖代碼中使用HTML.Action()調用的操作。

控制器代碼

[ChildActionOnly] 
public ActionResult someAction() 
{ 
    //return whatever you need 
} 

視圖代碼

Html.Action("someAction") 

這應該防止未主動地調用服務器上的操作瀏覽該網站的人。

0

如果您不需要在您的網站上進行身份驗證,那麼就沒有可靠的方法來實現,然後只允許經過身份驗證的用戶調用服務器端操作。

+0

謝謝!這應該是一個常見的問題。看看堆棧溢出。 (或者Google本身)。他們不需要登錄。所以我可以構建一個基本上調用其控制器方法和wala的網站,我的網站上有很多功能。我是否會限制每小時任何特定IP的點擊次數? – Barka 2012-02-13 19:25:34

0

一種方法是使用客戶端必須提供給控制器的某種時間敏感令牌。

  1. 實現Web服務,它需要一些來自用戶的憑據,憑據是否有效,返回基於服務器的時鐘散列時間敏感令牌。應該通過SSL調用此服務,以便在傳輸過程中保護憑據。

  2. 您的每個受保護的控制器除了他們目前所期望的任何其他輸入外,還會期望此令牌。然後,您將通過對其進行去散列來驗證令牌以獲取存儲在其中的時間。在這裏,您可以決定令牌有效的時間長短,並選擇要接受的時間間隔。對於不去散列屬性或過期的令牌,返回一些錯誤結果。對於有效的令牌,返回正確的結果。而不是令牌對時間敏感,您也可以實施使用次數場景,但時間敏感的方法更容易。

這樣,您的API控制器將不需要登錄或SSL。您的有效用戶只需要事先獲得您的令牌,然後使用它來調用您的服務。任何人都可以攔截這些令牌,但在可能很短的時間後它們不會有任何好處。