2011-05-16 138 views
2

我正在開發一種帶有某種認證的WCF服務。WCF會話是否安全?

所有用戶都將是平等的,所以我打算要求會議,並有只有發起會話,並且不終止它的方法。簡化:

[OperationContract(IsInitiating = true, IsTerminating = false)] 
void Open(String user, String password); 

所以,如果密碼是錯誤的(再次,這是一個簡化)我會拋出異常,因此會議將結束。這樣,我不需要在每個方法調用中檢查憑據。

這是一個好辦法?如果不是,爲什麼?

更新:我不得不寫這個急,所以我會盡量詳細說明一下,讓我的問題更清晰。

的驗證方法是必須的,我不問了。我想知道會話管理。

當我使用[OperationContract的(IsInitiating =真,IsTerminating =假)]的會話被啓動。我不需要存儲ID或任何東西; WCF管理一切。當引發異常或調用了IsTerminating = true的方法時,會話結束,並且後續對服務方法的調用失敗,直到啓動新會話。

我想知道的是,如果攻擊者繞過WCF會話管理的東西比較容易,創建一個而不調用Open,這是我使用IsInitiating = true和IsTerminating = false的唯一方法,所以,合法開始會議的唯一途徑。

+0

這不是一個好方法。答案[這裏有很好的WCF安全概述的鏈接。](http://stackoverflow.com/questions/450089/conceptual-overview-of-wcf-security-model)你應該把安全處理推入到WCF框架中,因爲你'請放心,它是正確實施的,而不是推出自己的產品。 – 2011-05-16 17:40:45

+1

對不起,要求是要求。我只想知道WCF會話的安全性。 – raven 2011-05-17 08:01:39

回答

2

WCF會話可以像你一樣的安全,根據您選擇的結合。

http://msdn.microsoft.com/en-us/library/ms731172.aspx

不過,我建議以上是行不通的,因爲你的方法沒有返回值來調用客戶端指示它應該通過在後續調用(即會話ID)認證自身。

一個更好的辦法是做所有的安全綁定(見上面的選項繁多鏈接)檢查,離職本身只是揭露方法,而不必擔心驗證客戶端。

+0

我不需要傳遞一個ID;會話由WCF自動管理。我需要知道的是,如果有一個合理的方式讓一個邪惡客戶在不打開Open的情況下僞造一個假會話。 – raven 2011-05-17 08:04:57

1

是的,對於惡意客戶端「劫持」經過身份驗證的會話將是微不足道的,除非您使用無法訪問潛在通信攔截器的加密密鑰加密所有帶有會話標識符的通信。再次,如果沒有足夠的加密和反重放保護,他們也會同樣簡單地攔截傳輸的用戶名和密碼。

有時要求需要一次實現選擇開始被提出重新審查。聽起來這可能是其中一種情況...

+0

感謝您的回答。如前所述,Open(字符串用戶,字符串密碼)是對更復雜系統的大大簡化(針對外部系統的質詢 - 響應身份驗證)。回到WCF會話,並假設登錄系統是相當安全的,你是否知道**會話ID是以純文本形式發送的?手頭有什麼參考?我希望它能稍微詳細一些...... – raven 2011-05-17 14:17:49