2011-02-07 79 views
4

我有WCF的Web服務和客戶端調用這個服務,這個客戶端將部署在很多地方。我必須對每個客戶端進行唯一身份驗證和授權。因此每個位置都有其唯一的用戶名和密碼。如何保護WCF客戶端應用程序中的敏感數據?

現在我的問題是

  1. 如何唯一標識每個客戶端?
  2. 如何在客戶端存儲一些敏感數據?

我想到了幾個辦法,

  1. 使用證書來識別客戶端。我必須生成並部署證書。
  2. 在服務器端有一個活動目錄,並讓每個客戶端使用一個Windows用戶帳戶。
  3. 加密用戶名和密碼並將它們存儲在配置文件中。我相信使用aspnet_regiis加密配置文件不會幫助我,因爲任何人都可以解密它,只要他們能夠訪問機器。

回答

1

您的問題可以分爲三個部分。其中兩個與WCF中的安全性直接相關,另一個超出範圍。

認證和授權 - 是的,這是可能的。 WCF提供了幾種設置,以允許對客戶端進行身份驗證並提供其角色。你也可以建立你自己的。驗證不在您的AD域中的客戶端的最常見方案是使用用戶名和密碼憑證以及服務上的自定義驗證或使用客戶端證書。

自信和誠信 - 由於您對安全性的關注,您還應該涉及安全傳輸憑據(和消息數據)。如果您不提供安全傳輸,網絡上的任何人都將能夠嗅探通信並竊取證書(或數據)。攻擊者也將能夠攔截通信並修改傳輸的數據。爲了保護通信,您需要傳輸安全性(TLS,SSL/HTTPS)或消息安全性 - 在證書提供的Internet場景中。

保護客戶端的憑證 - 這大部分不在您的控制範圍之內。一旦您將客戶端應用程序的憑證部署到客戶端計算機,而客戶端計算機不受您的控制,則您無法強制執行提供的憑據的安全性。這取決於您的用戶/客戶。如果您以某種方式在應用程序中包含憑據,熟練的最終用戶/攻擊者可能會始終能夠獲取它們。但這是每個安全解決方案的問題 - 有人必須有權訪問憑據。

0

我傾向於贊成certs。他們比u/p更難以妥協。

如果您的客戶端數據相當輕量級,只需encipher an XML file在客戶端應用程序中使用對稱加密。

如果您擔心客戶端應用程序遭到入侵,則可以使用服務器的公鑰對稱地加密數據。然後,當您需要它時,您會將輕量級加密數據發送到服務器,並在WCF響應中將其解密。如果它僅在會話啓動時發生(否則,這是很多流量),這可能是可行的。

+0

我有一個證書來加密流量,所以我不關心嗅探。我很擔心給客戶一些身份和保護身份。 – iraSenthil 2011-02-07 20:49:36

+1

賽爾特絕對是要走的路,然後,恕我直言。順便說一句,我不關心流量的安全性,只是數量。如果用戶不得不回撥服務器以便爲每個操作破譯數據,那麼這將會非常繁瑣而且可能是潛在的。 – 2011-02-07 23:40:30