2010-03-14 26 views
0

我有一個通過調用WCF服務更新的AjaxControlToolkit DynamicPopulate控件。我知道我可以檢查服務請求中的HttpContext,以查看頁面的用戶(以及控件)是否已通過身份驗證。但是,我不希望任何人都能夠直接調用服務,即使他們已經登錄。我希望僅允許訪問服務,以允許從該頁面發出的請求。主要是,我不希望任何人能夠以編程方式進行大量呼叫,然後逆向設計服務背後的算法。如何限制ASP.NET AJAX頁面調用的WCF服務僅允許調用該頁面?

關於如何做到這一點的任何聰明的想法?也許我在想這個?

在此先感謝。

+0

也許你可以添加一些邏輯來檢查引用的限制訪問。 – Zachary 2010-03-14 22:03:04

+0

只需跟隨我自己的帖子。簡單的方法來禁用Web服務文檔。加入節點配置文件: 如果您正在使用適合於Ajax的服務<刪除名稱=「文檔」 /> NovaJoe 2010-03-15 06:05:55

+0

Ajax代理腳本提供了相同的信息WDSL那麼即使將WSDL關閉(這對於Ajax服務來說也是默認的)並不是真正的幫助。 – blowdart 2010-03-15 13:03:22

回答

0

我用不同的方法解決了這個問題。我只是通過檢查HttpContext來確保提出請求的用戶已通過身份驗證,而不是試圖將服務保護到單個頁面。這依賴於WCF服務類上啓用的ASP.NET兼容性:http://msdn.microsoft.com/en-us/library/ms752234.aspx

然後我有權訪問服務中的HttpContext,並且可以檢查該呼叫是否來自經過身份驗證的用戶。 = D

0

簡單的答案是你不能。複雜的答案是你可以做很多工作,你可以例如

  1. 基於調用者的IP速率限制。
  2. 根據會話和速率限制刪除cookie。
  3. 當頁面加載並根據頁面加載速率限制時,根據頁面刪除一個cookie。

然而,沒有一種是萬無一失的,所有的合法請求都可能出錯。

+0

有道理。我正在考慮實施該功能,以抵制用戶帳戶分享。很高興知道。謝謝。 – NovaJoe 2010-03-15 06:06:13

0

如果你真的想要限制這只是一個服務器提出請求,你可以添加一個證書到該服務器並檢查該證書。但是,您可能無法真正限制訪問僅調用您的服務的單個頁面

你可以添加很多額外的元素,比如標題等 - 但沒有一個會完全合理 - 如果有足夠的決心,他們將能夠弄清楚你正在做什麼,並複製它。

真的這麼說:你爲什麼需要限制這個訪問呢?

+0

該服務爲高價值市場提供有價值的信息。 1000萬強大的消費羣體,年收入達80億美元。儘可能嚴密地阻止競爭對手似乎很重要。 – NovaJoe 2010-03-15 06:06:30

+0

@NovaJoe:好的,有意義 - 所以你可以在請求來自的Web服務器上放置一個特定的證書嗎?在我看來,這可能是最安全的第一步。 – 2010-03-15 06:30:11

+0

證書是一個很好的建議。聽起來類似於我安裝的站點到站點VPN。一臺服務器,一臺客戶機。設置它並忘記它。 – NovaJoe 2010-03-16 19:58:00