0

我的场景:

  • 许多 WCF 客户端位于我无法控制的环境中
  • 服务器要么是我的,要么在我无法控制的环境中

所以最坏的情况是客户端和服务器不在我的控制范围内。更具体地说,我可能假设托管此代码的人可能会尝试恶意冒充服务器或客户端(服务器更有可能)。但是,客户端需要验证服务器是我的代码,服务器需要验证客户端是我的代码。我已经看过所有使用证书的建议;但是,考虑到我的情况,这是一个选择吗?

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

我觉得这行得通;但是,我觉得这里可能缺少一些开箱即用的东西。我很接近,偏离轨道了吗?感谢您的任何指导!

4

2 回答 2

1

证书绝对是您遇到的问题。

您的服务器将很容易被客户端验证,因为它将提供每个客户端都知道的证书,这里 SSL 是一个不错的选择。

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

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

于 2011-02-01T06:06:49.953 回答
0

我不认为有任何开箱即用的东西可以做到这一点,仅仅是因为服务器验证调用服务的客户端上的代码是授权代码是一种不寻常的要求。

一般来说,建立信任就足够了:

  1. 服务器有一个证书,服务使用 SSL - 这样客户端就可以确信他们正在连接到正确的服务器机器。
  2. 客户端向服务器提供身份验证详细信息(例如用户名/密码、证书等),以便服务器知道连接的客户端是可信任的。

您正试图采取额外的步骤来验证不仅验证了用户/机器,而且验证了运行的代码 - 这简直是矫枉过正。如果运行的代码未经验证,则:

  1. 其中一台机器已被入侵,在这种情况下,您需要担心更大的问题。
  2. 您的一位用户针对您的服务编写了代码,并且正在“非法”使用它。如果您的服务只允许授权用户执行“危险”操作,这应该不是问题。
于 2011-02-01T05:13:33.987 回答