在 Internet 上用很少的客户端保护 WCF 服务的最佳方法

Best way to secure a WCF service on the internet with few clients

我希望通过 Internet 向选定的客户公开服务。在这个阶段 api 非常小,我只希望已知的客户端能够访问该服务。我现在不需要能够识别客户,但我预计随着 api 的增长,将来我将需要能够识别客户。

我想知道在短期内保护服务的最佳方法是什么,从长远来看我可能希望能够授权客户端访问服务上的特定方法?

我正在考虑使用传输安全 - 即 SSL。我是否还应该考虑将 Message security 与

一起使用
clientCredentialType="certificate"

在哪种情况下,每个客户端都将拥有自己的证书以使用服务对他们进行身份验证?

或者我应该简单地为每个客户提供一个 API 密钥,这将提供类似水平的客户差异化?

欢迎提出任何其他建议。

请注意,这是一个服务到服务的接口——即不是客户端应用程序。该服务的用户数量将受到限制,我预计不需要在数据级别应用安全性,更不用说在方法访问级别。

给他们每个人一个密钥,他们必须在他们的请求中提交一个 SHA 签名(他们传递的参数的 some/all 的编码版本,所以你也可以做 SHA 并检查它匹配)。

目前最简单的方法是将 SSL 添加到您的 IIS 主机,然后将客户端更改为使用 HTTPS 连接,就像这样...

      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>

您可以使用自定义用户 name/password 身份验证来验证用户或 AD 身份验证来控制谁可以使用该服务。

目前我认为最好的解决方案是使用自定义用户 name/password 身份验证并暂时允许每个用户,因为您不想识别用户。以后当你想识别用户时,更改代码并放入验证。

参考https://msdn.microsoft.com/en-us/library/aa702565(v=vs.110).aspx。在验证函数中,暂时不要抛出任何异常