我有一個WCF服務需要從客戶端調用(ajax調用)。 我想在ASPX頁面上使用ScriptManager將ServiceReference添加到WCF服務(或)JQuery ajax調用到WCF服務。我想拒絕匿名用戶訪問WCF服務。在從JavaScript調用服務方法之前,有沒有辦法進行用戶身份驗證?如何從客戶端保護我的WCF服務調用?如何使用AJAX調用WCF服務時對用戶進行身份驗證?
回答
有很多事情可以做,以確保您的WCF服務。如果您的服務已經是現有整體ASP.NET應用程序的一部分,可能最簡單的方法就是爲您的服務啓用ASP.NET兼容模式。如果您的ASP.NET應用程序使用身份驗證來驗證用戶(例如表單身份驗證),並且您正在通過會話cookie啓用該功能,那麼ASP.NET兼容模式將爲您完成大部分工作。
默認情況下,這個被禁用,但是你可以用除了你的web.config啓用:
<system.serviceModel>
...
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
...
</system.serviceModel>
這將使在應用程序中所有的服務兼容模式。您也可以通過服務的基礎服務通過設置web.config中值,也使用您的服務類而不是接口)的AspNetCompatibilityRequirements屬性啓用此:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class FooService: IFooService {
}
當您啓用此設置,您可以訪問HttpContext.Current(就像一個ASP.NET頁面),它也會強制用戶必須在訪問.svc文件之前進行身份驗證(就像在訪問任何.aspx文件之前必須進行身份驗證一樣)。如果您嘗試訪問.svc文件而未通過身份驗證,並且您使用表單身份驗證,則調用者將被重定向到默認登錄頁面,並且在成功身份驗證後,將被重定向到.svc文件。
這一建議作出一些假設:
- 你的服務是在ASP.NET應用程序;
- 您正在使用某種類型的ASP.NET身份驗證(如表單身份驗證)來驗證用戶的憑據並在cookie中保存驗證票據;
這個建議,儘管可能不是最安全或最健壯的,但可能是最簡單的方法,至少可以起牀和運行,並保證您的網站在合理的程度上。
以下是關於ASP.NET兼容模式的一個很好的MSDN library intro article。
如果這樣可行,下一步可能是研究HMAC身份驗證(包括更多的工作和密鑰的協調 - 但它絕對是更安全的IMHO)。這是一個很好的實施它的步驟 - http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/22/how-to-implement-hmac-authentication-on-a-restful-wcf-service.aspx
我希望這可以幫助。祝你好運!!
你提到了關於aspnetCompatibility的好處,但是我的wcf服務是separte項目,而不是在asp.net網站application.i中沒有使用表單身份驗證。我正在驗證數據庫級別的用戶。但有會話通過憑據。角色和頁面級訪問也在數據庫中。 – lourdhu 2010-08-25 14:07:43
您不必在網站項目中擁有該服務。我在項目中的一些服務上使用了asp.net兼容性,而我的服務位於Web項目引用的單獨的DLL中。 – 2010-08-25 17:20:58
David,具有兼容性模式是一個好主意,並提供對HttpContext的訪問,但是它並不妨礙您在未經身份驗證時調用該服務。 – Ehsan 2014-06-20 18:59:11
用於WCF Web http服務保護Web端點的唯一方法是使用傳輸安全性通過HTTPS公開它。當使用基於消息的安全性時,安全信息通常放在SOAP頭中,並且因爲發送到非SOAP端點的消息不包含SOAP信封,所以無處放置安全信息,並且您必須依賴傳輸安全性。
我不確定這是否會有所幫助,但我在我的WCF和webapp之間放置了一層。我會做一個AJAX servicereference調用本地asmx。這受到表單身份驗證票證的保護。然後,asmx會進行任何進一步的安全檢查(如果允許該呼叫的特定用戶請求該數據或基於該用戶對數據進行整形),然後將該呼叫轉發給我的WCF服務。
這樣,我的服務層不需要知道每個訪問它的應用程序的用戶,只需要關心傳送所請求的數據。
asmx webservice承擔了安全責任。
然後我使用WAS在IIS中託管WCF,並且只允許對Windows應用程序池運行時的身份進行Windows身份驗證訪問。
所以:
ASPX - > ASMX WebService的 - > WCF
我認爲這會給你的控制/隔離和安全你所要求的?
- 1. 對WCF服務進行身份驗證
- 2. 使用訪問令牌對用戶進行身份驗證 - WCF服務
- 3. 使用Javascript進行WCF身份驗證
- 4. JNI調用來使用LogonUser對用戶進行身份驗證?
- 5. 使用自託管WCF服務進行相互身份驗證
- 6. 使用WCF服務跨域進行身份驗證的問題
- 7. 如何禁用cookie時對用戶進行身份驗證?
- 8. wcf用戶身份驗證
- 9. 對用戶進行身份驗證
- 10. AJAX請求WCF服務身份驗證
- 11. 如何通過社交服務進行用戶身份驗證
- 12. 天青:如何進行身份驗證服務API調用
- 13. 在Java服務器中對Windows用戶進行身份驗證
- 14. 對Qt服務器上的用戶進行身份驗證
- 15. 如何使用網站API對用戶進行身份驗證?
- 16. 如何使用遠程API對用戶進行身份驗證?
- 17. 如何使用SOAP對用戶進行身份驗證?
- 18. 如何使用Firebase RESTful API對用戶進行身份驗證?
- 19. 如何使用Shiro對用戶進行身份驗證?
- 20. 使用基於聲明的身份驗證調用WCF服務
- 21. 使用匿名身份驗證調用HTTPS WCF服務?
- 22. 如何使用WCF/JSON對用戶進行身份驗證和跟蹤?
- 23. 如何在使用UsernamePasswordValidator進行身份驗證時創建新用戶? WCF
- 24. 使用Windows身份驗證調用WCF服務時無法執行URL
- 25. 對ProtoRPC服務進行身份驗證
- 26. 從Silverlight應用程序調用WCF服務時獲取身份驗證使用窗體身份驗證
- 27. WCF身份驗證服務
- 28. 使用Java中的服務帳戶進行LDAP身份驗證
- 29. ASP.NET調用WCF服務時的身份驗證/冒充問題
- 30. `如何使用CAS進行Web服務身份驗證?
您是否試圖從您的JavaScript內認證用戶?所以如果用戶沒有被認證,那麼服務調用甚至不會被創建?對不起,如果我重複你的問題,但我想確保我理解你的要求。謝謝! – 2010-08-19 02:57:07
wcf ajax服務沒有像Windows身份驗證,用戶名/密碼身份驗證,x509證書等任何安全功能。我們必須使用SSL保護傳輸級別的數據,但我想以安全的方式保護我的wcf ajax調用,我的意思是我不要讓黑客或欺騙或使用JavaScript來創建我的Web方法。我不知道該怎麼做。 – lourdhu 2010-08-22 02:37:41
在下面添加了一個答案/建議。不知道這是你在找什麼,但讓我知道,我可以相應地更新。 – 2010-08-23 02:05:07