我是WCF的新手,并且对可用于保护我的WCF服务的选项感到不知所措。什么是最适合这种情况的安全模型?
服务器: 必须能够访问在IIS 6上运行的特定公共可用ASP.Net应用程序的上下文。但是,该服务应仅可用于Intranet上的单个客户端。基本上,服务需要在公共网站上进行操作,但服务本身应该完全不为公众所用。我想避免使用SSL服务。
客户端: 在内部服务器上运行的ASP.Net Intranet应用程序(与上述应用程序不同的机器,但也使用IIS 6)。该服务将只有这个客户端。
代码似乎相当直接 - 我在两个ASP.Net应用程序之间的共享库中有我的服务合同。我需要很多帮助来确定如何设置每个web.config以提供某种类型的安全性,以便公共访问“服务器”应用程序根本不能使用该服务,而“客户端”Web应用程序具有完全可信访问权限服务。
答案 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列表: