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

C# 用很少的客户端在internet上保护WCF服务的最佳方法,c#,web-services,wcf,security,C#,Web Services,Wcf,Security,我希望通过互联网向选定的客户公开一项服务。在这个阶段,api非常小,我只希望已知的客户端能够访问服务。我现在不需要能够识别客户机,但是我设想,随着api的增长,将来我将需要能够识别客户机 我想知道短期内保护服务的最佳方式是什么,从长远来看,我可能希望能够授权客户访问服务上的特定方法 我正在考虑使用传输安全性,即SSL。我是否也应该考虑将消息安全性用于 clientCredentialType="certificate" 在哪个类别中,每个客户机将拥有自己的证书,该证书将使用服务对其进行身份验证

我希望通过互联网向选定的客户公开一项服务。在这个阶段,api非常小,我只希望已知的客户端能够访问服务。我现在不需要能够识别客户机,但是我设想,随着api的增长,将来我将需要能够识别客户机

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

我正在考虑使用传输安全性,即SSL。我是否也应该考虑将消息安全性用于

clientCredentialType="certificate"
在哪个类别中,每个客户机将拥有自己的证书,该证书将使用服务对其进行身份验证

或者我应该简单地为每个客户机提供一个API密钥,以提供类似级别的客户机差异

欢迎提出任何其他建议


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

给他们每人一个密钥,他们必须在请求中提交SHA签名(他们传入的部分/所有参数的编码版本,因此您也可以执行SHA并检查匹配情况)。

目前最简单的方法是将SSL添加到IIS主机,然后将客户端更改为通过HTTPS连接,如下所示

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

您可以使用自定义用户名/密码身份验证对用户进行身份验证,或使用AD身份验证控制谁可以使用该服务

目前,我认为最好的解决方案是使用自定义用户名/密码身份验证,并暂时允许每个用户名/密码。将来,当您想要识别用户时,请更改代码并进行验证


参考。在validate函数中,暂时不要抛出任何将提供安全性的异常

,但不会帮助OP确保只有指定的客户端才能使用该服务。“安全”是什么意思?袭击你的人叫伊芙,马洛里还是什么?当然,最简单的通用解决方案之一是基于SSL的Kerberos。