场景:
我们开发了一个 wcf 网络服务,它链接到我们防火墙/dmz 内的数据库。 Web 服务和客户端应用程序(数据捕获 Web 表单)需要托管在我们面向 Internet 的 Web 服务器上。这是因为它需要由我们的第三方 CMS(托管我们的主网站)托管的 Web 控件访问。
问题:
我们希望确保尽可能安全地传递数据,但我们会谨慎对待我们自己与 CMS 提供商之间的共享证书(反之亦然)。我们更希望将 Web 控件托管为 https,但我阅读的所有文档都说这需要证书进行身份验证。我一直在研究在客户端和 svc 之间应用额外的自定义安全性(自定义绑定(bind)、在代码中应用的用户名/密码、通过 IP 地址限制调用)但我想知道是否有其他人遇到过这种情况。
当第三方托管应用程序的 Web 控件时,我确信一定有应用自定义安全性的示例,但到目前为止,我只在网上找到“它是证书或什么都不是”的评论。非常感谢任何帮助或指导。
目前已查看的许多链接示例包括:
我希望应用建议的设置,例如在<wshttpBinding>
和 <serviceCredentials>
下面添加一个新的“安全”类以包含自定义用户名/密码验证器,但出现“svc...不实现继承成员...”错误。
<wsHttpBinding>
<binding name="EndpointBinding">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None"/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="My.WcfSvc.Authentication.Secure,
My.WcfSvc" />
</serviceCredentials>
最佳答案
我最好根据你所写的来猜测你的架构,但这里有一些关于你的实现的想法:
如果您绝对必须使用 WCF 来完成此操作并且它是在服务器到服务器之间完成的,我会通过 X-509 证书来完成。它为您提供点对点安全性。我还会为您在 IIS 上的安全实现添加一些不太重要但辅助的方面,例如 IP 限制、在生产中实现的零元数据等。如果您不是在服务器到服务器上执行此操作并且有网络发起的流量调用这些方法,我会重新考虑您的架构并考虑选项 #2。
如果您还有时间以不同的方式完成此任务并且有能力改变开发过程的另一端,我更喜欢基于 token 的架构,用于通过 HTTPS w/JSON 交付的 Web API。您不仅可以识别您已提供给合作伙伴的预共享 token ,以及围绕这些 token 的 IP/DNS 限制,您还可以在处理数据之前进行两步身份验证过程。这使您能够为很快过期的数据传输发行临时 token 。最重要的是,您还可以使用 CryptoJS 之类的东西来加密 JSON,它使用您和您的合作伙伴之间的预共享盐进行多达 512 次加密 https://code.google.com/archive/p/crypto-js/ - 大部分是不必要的,但可以添加到你的箭袋中。一般而言,两步法可为您提供更强大的验证过程,让您高枕无忧。
希望这有一点帮助。祝您集成顺利!
编辑:我意识到我参加这个派对有点晚了。我希望一切顺利。 OP,您最终实现了什么?
关于c# - WCF - 在 CMS 中使用 Web 控制的客户端安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269967/