2011-02-07 80 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