5

我有一個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中是否有內置的方法來管理我在第二個解決方案中提到的令牌系統?

其他解決方案,可以腳的範圍受到歡迎。

回答

1

我不確定您所詢問的安全級別,但我不確定在XAP文件中存儲用戶名和密碼是否有困難,並且是否被混淆。

我可以描述一個我在生產中實現的解決方案。

基本上,我安全標準窗體身份驗證的應用程序,但就像你通常會使用ASP.NET,我使用驗證Web服務附帶的ASP.NET窗體身份驗證我不使用重定向。這樣我的登錄通過Silverlight控件。我的應用程序有一個用戶存儲,用於對身份驗證服務進行身份驗證。就像你通常會用形式使用<authorization>元素與<deny users="?">

protected void Application_Start(object sender, EventArgs e) 
{ 
    AuthenticationService.Authenticating += new EventHandler<AuthenticatingEventArgs>(AuthenticationService_Authenticating); 
} 

void AuthenticationService_Authenticating(object sender, AuthenticatingEventArgs e) 
{ 
    try 
    { 
     bool authenticated = //Call your user store here. 

     e.Authenticated = authenticated; 
    } 
    catch (Exception ex) 
    { 
     e.Authenticated = false; 
    } 
    e.AuthenticationIsComplete = true; 
} 

您將確保該網站的部分:

勾到驗證服務,我這樣做是在Global.asax中。瀏覽器將爲您處理所有的cookies。如果你想保護服務,在服務/文件夾下,你會拒絕沒有經過認證的用戶。

關於更詳細的解決方案本MSDN Post會談。

+0

我從來沒有使用表單身份驗證。我所知道的是我想確保對我的WCF服務的調用。我可以使用我提到的綁定配置來做到這一點。你能否嘗試解釋我如何採用你的解決方案? –

+0

這是一種使用您的用戶存儲來驗證WCF和整個應用程序的一種方式,不需要爲WCF調用使用一個硬編碼的用戶名。你現在如何認證用戶? –

+0

現在我沒有任何驗證系統。我唯一做的關於用戶身份的事情是在登錄頁面詢問用戶名和密碼,並作爲回報顯示用戶的特定數據。你能更詳細地解釋我可以如何使用你提供的WCF綁定解決方案嗎? –

相關問題