验证WCF中的调用方/服务器

时间:2011-02-01 04:17:53

标签: wcf security soap hmac

我的情景:

  • 许多处于我无法控制的环境中的WCF客户端
  • 服务器将是我的,或者在我无法控制的环境中

最糟糕的情况是客户端和服务器不受我的控制。更具体地说,我可能会认为托管此代码的人可能会试图恶意冒充服务器或客户端(服务器更有可能)。但是,客户端需要验证服务器是否为我的代码,服务器需要验证客户端是否为我的代码。我已经看到了使用证书的所有建议;但是,根据我的情况,这是一个选项吗?

我考虑过的一种方法是编写IClientMessageInspector和IDispatchMessageInspector来设置和验证双方的自定义SOAP标头。我会根据源代码中包含的密钥创建一个HMAC签名(假设我有办法隐藏它),然后根据消息体验证摘要。

我觉得这会起作用;但是,我觉得可能会有一些我在这里缺少的开箱即用的东西。我离近了吗?谢谢你的指导!

2 个答案:

答案 0 :(得分:1)

证书绝对是您的理想选择。

您的服务器很容易通过客户端进行身份验证,因为它将提供每个客户端都知道的证书,SSL是一个不错的选择。

服务器还可以通过请求每个客户端都应提供证书来验证客户端(服务器可以检查证书的特定颁发者 - 在这种情况下是您自己的颁发者)。

现在您只需要正确管理/保护您的证书服务器,以确保它不会受到损害。

答案 1 :(得分:0)

我认为没有任何开箱即用的功能,只是因为服务器验证调用该服务的客户端上的代码是授权的代码是一个不寻常的要求

通常,建立信任就足够了:

  1. 服务器有证书,服务使用SSL - 这样客户就可以确信他们正在连接到正确的服务器计算机。
  2. 客户端向服务器提供身份验证详细信息(例如用户名/密码,证书等),以便服务器知道连接客户端可以信任。
  3. 您正在尝试采取额外步骤来验证不仅验证了用户/计算机,还验证了运行的代码已经过验证 - 这实在是太过分了。如果正在运行的代码未经过验证,请执行以下操作:

    1. 其中一台机器已被盗用,在这种情况下,您需要担心更大的问题。
    2. 您的一位用户已针对您的服务编写代码并正在“非法”使用该代码。如果您的服务仅允许授权用户执行“危险”操作,则这不应成为问题。