我应该使用哪种WCF安全方案?

时间:2009-10-29 15:24:07

标签: asp.net vb.net wcf

我是WCF的新手,并且对可用于保护我的WCF服务的选项感到不知所措。什么是最适合这种情况的安全模型?

服务器: 必须能够访问在IIS 6上运行的特定公共可用ASP.Net应用程序的上下文。但是,该服务应仅可用于Intranet上的单个客户端。基本上,服务需要在公共网站上进行操作,但服务本身应该完全不为公众所用。我想避免使用SSL服务。

客户端: 在内部服务器上运行的ASP.Net Intranet应用程序(与上述应用程序不同的机器,但也使用IIS 6)。该服务将只有这个客户端。

代码似乎相当直接 - 我在两个ASP.Net应用程序之间的共享库中有我的服务合同。我需要很多帮助来确定如何设置每个web.config以提供某种类型的安全性,以便公共访问“服务器”应用程序根本不能使用该服务,而“客户端”Web应用程序具有完全可信访问权限服务。

1 个答案:

答案 0 :(得分:0)

选项及其组合的数量确实令人震惊 - 这就是为什么微软和着名的WCF大师Juval Lowy都提出了“安全方案”,这应该可以帮助您专注于一些可能有用的可管理方案。

请参阅J.D. Meier关于Microsoft方法的博文,Juval的想法最好总结在David Sackstein的blog post series中。

对于内部的企业后防火墙解决方案,您最好的选择可能是具有传输级安全性和Windows凭据的netTcpBinding

更新:不幸的是,netTcpBinding只能用于IIS7 / WAS(使用Vista,Win Srv 2008),并且在IIS6上支持 :-(

对于这种情况,您需要使用其中一个HTTP绑定,或者自己为基于NetTCP的服务创建主机(控制台应用程序,NT服务)。

马克

更新

如果您想确保只有属于Active Directory域成员的本地用户才能访问您的服务,最好的办法是使用Windows凭据作为身份验证机制。在这种情况下,在您的域中没有Windows帐户的外部用户将无法使用该服务,并将被拒绝。

您可以使用Windows凭据为您的服务设置basicHttpBinding或wsHttpBinding以及传输安全性。如果您使用传输安全性,则您将使用https://地址,并且必须在您的网络上启用SSL,但另一方面,您不需要使用证书来识别服务。

您的服务配置如下所示:

<bindings>
  <basicHttpBinding>
    <binding name="securedBasicHttp">
      <security mode="Transport">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="MyService">
    <endpoint name="Default"
              address="MyService"
              binding="basicHttpBinding"
              bindingConfiguration="securedBasicHttp"
              contract="IMyService" /> 
   </service>
</services>

很多信息以及操作方法视频的良好资源将是模式&amp;在Codeplex上练习WCF Security Guidance - 非常好,有时候几乎有点压倒性。

您可能还想查看此How-To articles on MSDN列表: