Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF-防止未经授权的客户端_Wcf - Fatal编程技术网

WCF-防止未经授权的客户端

WCF-防止未经授权的客户端,wcf,Wcf,我有一个WCF服务,我只希望我的应用程序可以访问它。我的应用程序由使用JQuery的传统web界面和Silverlight界面组成。这两个界面都不需要用户登录 有没有办法告诉WCF服务只允许来自我的域的客户端?如果是,怎么做 谢谢大家! > P>您可以在IIS中添加安全限制,只允许从域到WebService的调用。< P>除非您考虑Windows Authe(因为请求来自您的域),所以最好的方式是通过防火墙在不同的级别上执行。在该级别,您可以将传入流量限制为一组已知的IP地址。这只会走这么远,因

我有一个WCF服务,我只希望我的应用程序可以访问它。我的应用程序由使用JQuery的传统web界面和Silverlight界面组成。这两个界面都不需要用户登录

有没有办法告诉WCF服务只允许来自我的域的客户端?如果是,怎么做


谢谢大家!

> 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上工作。