2010-08-19 60 views
3

我在ASP.NET應用程序中有幾個WCF服務。我想阻止來自我的域外的應用程序訪問這些服務。是否有配置設置允許我阻止來自我的域外的請求?使用WCF防止跨域訪問服務

謝謝!

回答

0

編輯這將阻止所有未經過身份驗證的用戶訪問您的服務。如果您需要域中未經過身份驗證的用戶訪問服務,請告訴我,我會相應更新。

您是否在ASP.NET應用程序中使用身份驗證?

<system.web> 
    ... 
    <authentication mode="Forms"> 
    <forms protection="All" defaultUrl="login.aspx" ... /> 
    </authentication> 
    ... 
</system.web> 

如果是這樣,您的.svc文件將無法訪問,直到您的用戶進行身份驗證。如果未經過身份驗證的用戶嘗試訪問.svc文件,他們將被重定向到您的登錄頁面。

EDIT(2): 既然你需要你的網站內的非認證接入服務,一兩件事你可以考慮的是具有真實在的首次訪問網站發送到用戶的機器上的cookie。該cookie可以使用創建日期和某個密鑰來創建散列,並且您可以驗證服務器上每個請求的散列。來自其他網站的請求不會傳遞cookie,並且您的服務會手動檢查該cookie是否存在 - 如果不存在,則拒絕該請求。

如果您的WCF服務啓用了ASP.NET兼容性(true)並且AspNetCompatibilityRequirementsMode設置爲Allowed或Required,那麼您應該可以訪問HttpContext和Cookie。 Here關於ASP.NET兼容模式的更多信息。

這可能不是最合適的解決方案,因爲我不知道您的方案和要求。但希望這有助於。

+0

Hi D. Hoerster。我確實需要域中的非認證用戶才能訪問這些服務。你能否提供一些關於這方面的見解?訪問服務的頁面與服務位於同一個域中。它只是訪問該頁面的用戶很可能不會被認證。 – user208662 2010-08-19 19:07:20

+0

爲了確保我明白了,您希望啓用'http:// mysite.com/dashboard.aspx'來訪問'http:// mysite.com/myservice.svc'(即使對於未通過身份驗證的用戶),但你不希望'http:// someothersite.com/default.aspx'訪問'http:// mysite.com/myservice.svc'。那是對的嗎? – 2010-08-19 19:44:07

1

如果您不希望向Internet公開服務,則不應將它們託管在公共服務器上。如果你真的需要這個,你應該首先開始尋找在網絡層面上確保你的服務的方式。例如,我猜ISA服務器應該能夠阻止對你的服務的請求。

2

你想要的是認證。限制基於域的訪問不是一種安全的身份驗證方式。

+0

+1最簡單的方法。 – 2010-08-19 21:03:55