我有一個N層應用程序,內容如下:
在IIS7的服務器端坐着一個ASP.Net應用程序,它公開了WCF服務。這些方法使用EF4與數據庫交談。用Silverlight 4.0編寫的客戶端正在調用WCF服務上的方法。N層應用程序中的WCF和Silverlight 4.0:驗證對服務的調用
WCF服務暴露了這種方法:
[OperationContract]
void DeleteItem(int i_ItemId);
我是新來seuring WCF服務,但我認爲這些未來的意見是真實的(糾正我,如果我錯了):
1)如果我將這種方法/服務保持原樣,任何知道我的服務位於http://www.mysite.com/myservice.svc的人都可以打開VisualStudio,打開「添加服務參考」並開始調用DeleteItem()。
2)如果我嘗試通過刪除MEX端點來解決上述問題,則仍然可以使用一些手動編碼來調用服務。
所以試圖解決這兩個問題,我開始學習WCF中的一些內置安全功能。快速瀏覽一下之後,我想通,我可以使用下面的綁定配置,以便在需要打電話到該服務的用戶名和密碼:
<wsHttpBinding>
<binding name="RequestUserName" >
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
試圖採用這種解決方案,即來到了我的腦海裏的第一件事是:當用戶登錄客戶端時,客戶端使用用戶名和密碼作爲WCF調用的憑證。在服務器端,這些憑證將針對數據庫進行驗證。
現在的問題是,那些憑證(用戶名和密碼)當然是用戶所知的,所以他可以使用它們以我已經提到的方式調用DeleteItem()。
在這裏,我想到了兩個解決方案:
1)而不是使用用戶名和密碼憑據,我將使用在客戶端硬編碼關鍵。加密XAP內部的Dll可能會阻止某人獲得此密鑰。
2)當用戶登錄客戶端時,服務器會發送某種臨時令牌(GUID或某物),客戶端可在此通信會話過程中使用該令牌來驗證其呼叫(假設直到用戶關閉客戶端)。
我的問題是:
什麼安全級別的第一個解決方案提供,你需要如何努力才能破解它的工作?
如果第一個解決方案非常微不足道,在WCF中是否有內置的方法來管理我在第二個解決方案中提到的令牌系統?
其他解決方案,可以腳的範圍受到歡迎。
我從來沒有使用表單身份驗證。我所知道的是我想確保對我的WCF服務的調用。我可以使用我提到的綁定配置來做到這一點。你能否嘗試解釋我如何採用你的解決方案? –
這是一種使用您的用戶存儲來驗證WCF和整個應用程序的一種方式,不需要爲WCF調用使用一個硬編碼的用戶名。你現在如何認證用戶? –
現在我沒有任何驗證系統。我唯一做的關於用戶身份的事情是在登錄頁面詢問用戶名和密碼,並作爲回報顯示用戶的特定數據。你能更詳細地解釋我可以如何使用你提供的WCF綁定解決方案嗎? –