WCF-防止未经授权的客户端
我有一个WCF服务,我只希望我的应用程序可以访问它。我的应用程序由使用JQuery的传统web界面和Silverlight界面组成。这两个界面都不需要用户登录 有没有办法告诉WCF服务只允许来自我的域的客户端?如果是,怎么做WCF-防止未经授权的客户端,wcf,Wcf,我有一个WCF服务,我只希望我的应用程序可以访问它。我的应用程序由使用JQuery的传统web界面和Silverlight界面组成。这两个界面都不需要用户登录 有没有办法告诉WCF服务只允许来自我的域的客户端?如果是,怎么做 谢谢大家! > P>您可以在IIS中添加安全限制,只允许从域到WebService的调用。< P>除非您考虑Windows Authe(因为请求来自您的域),所以最好的方式是通过防火墙在不同的级别上执行。在该级别,您可以将传入流量限制为一组已知的IP地址。这只会走这么远,因
谢谢大家! > P>您可以在IIS中添加安全限制,只允许从域到WebService的调用。< P>除非您考虑Windows Authe(因为请求来自您的域),所以最好的方式是通过防火墙在不同的级别上执行。在该级别,您可以将传入流量限制为一组已知的IP地址。这只会走这么远,因为IP可以被欺骗,但这是一个开放的服务,所以你去吧。更好的替代方案是防火墙和windows身份验证
或者,您可以通过查询来检查WCF中的客户端IP地址。是的,当然可以-只需从呼叫者处获得Windows凭据(即域中的Active Directory帐户) 任何未针对您的域进行身份验证的人都将被拒绝 您可以通过指定具有传输安全性的netTcpBinding(如果所有内容都位于公司防火墙后面)或具有消息安全性的wsHttpBinding来实现这一点:
<bindings>
<netTcpBinding>
<binding name="DomainUsersOnly">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
<wsHttpBinding>
<binding name="HttpDomainUsersOnly">
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
现在,您只需在端点中引用其中一个绑定配置:
<endpoint name="whatever"
address="......"
binding="netTcpBinding"
bindingConfiguration="DomainUsersOnly"
contract="IYourservice" />
而且你应该准备好离开。如果你的所有合法用户都应该在你的内部公司局域网上(在同一子网上),那么你可以使用类似的方法通过IP地址将其锁定。如果你想的话,你也可以通过这种方式将其限制在几个特定的IP掩码上
但如果你想让合法用户从任何地方攻击它,那么这不是一个好方法。在这种情况下,身份验证会更好。不过在这里要小心——我认为如果一个用户的用户名和密码与域用户相同(我知道不太可能)然后他们将作为域用户进行身份验证。不,他们不会-他们需要实际的Windows凭据-来自您域的Windows安全令牌-而不仅仅是碰巧同名。那么您如何解释表中的第三列:当您的客户端使用Windows凭据对WCF进行身份验证时,它不是发送用户名/密码-它是发送Windows域令牌-你不能通过与域用户使用相同的用户名/密码来伪造它。Marc是正确的。您必须为windows凭据建立实际的计算机对计算机信任才能在WCF上工作。