WCF - CMS中具有Web控件的客户端安全性

Tho*_*hom 7 c# asp.net security wcf

场景:

我们开发了一个wcf Web服务,它链接到我们的firewall/dmz中的数据库.Web服务和客户端应用程序(数据捕获Web表单)需要托管在面向Web的Web服务器上.这是因为它需要由我们的第三方CMS(托管我们的主网站)托管的Web控件访问.

问题:

我们希望确保数据尽可能安全地传递,但我们会谨慎对待自己和CMS提供商之间的共享证书(反之亦然).我们希望将Web控件托管为https,但我读过的所有文档都说需要证书才能进行身份验证.我一直在寻求在客户端和svc之间应用额外的自定义安全性(自定义绑定,在代码后面应用的用户名/密码,限制IP地址调用)但我想知道是否有其他人遇到过这种情况.

当第三方托管应用程序的Web控件时,我确定必须有应用自定义安全性的示例,但到目前为止,我只在网上找到了"它的证书或没有"评论.任何帮助或指导非常感谢.

到目前为止查看的许多链接的示例包括:

我已经看过应用建议的设置,例如在下面<wshttpBinding><serviceCredentials>下面添加一个新的'Secure'类来包含自定义用户名/密码验证器,但得到"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>
Run Code Online (Sandbox Code Playgroud)

Mob*_*ble 1

我根据您所写的内容对您的架构进行了最佳猜测,但以下是关于您的实现的一些想法:

  1. 如果您绝对必须使用 WCF 来完成此操作,并且它是在服务器到服务器上完成的,那么我将通过 X-509 证书来完成此操作。它为您提供点对点的安全性。我还会在 IIS 上的安全实现中添加一些不太重要但辅助的方面,例如 IP 限制、在生产中实现的零元数据等。如果您没有执行此服务器到服务器的操作并且有来自 Web 的流量调用这些方法,我会重新考虑你的架构并考虑选项#2。

  2. 如果您仍然有时间以不同的方式完成此任务,并且有能力改变开发过程的另一端,那么我更喜欢通过 HTTPS w/JSON 交付的基于令牌的 Web API 架构。您不仅可以识别您提供给合作伙伴的预共享令牌(具有这些令牌的 IP/DNS 限制),您还可以在处理数据之前进行两步身份验证过程。这使您能够为数据传输颁发很快就会过期的临时令牌。最重要的是,你还可以使用 CryptoJS 之类的东西来加密 JSON,它使用你和你的合作伙伴之间预先共享的盐进行高达 512 的加密https://code.google.com/archive/p/crypto-js/ - 大部分是不必要的,但可以添加到你的箭袋中。一般来说,两步法可以为您提供更强大的验证过程,让您高枕无忧。

希望哪怕是一点点也能有所帮助。祝您融入顺利!

编辑:我意识到我参加这个特别的聚会有点晚了。我希望一切顺利。你最终实施了什么,OP?