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

时间:2009-12-14 15:53:45

标签: wcf

我有一个WCF服务,我只希望我的应用程序可以访问。我的应用程序包含一个使用JQuery和Silverlight接口的传统Web界面。这些接口都不需要用户登录。

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

谢谢!

4 个答案:

答案 0 :(得分:2)

是的,您当然可以 - 只需要来自您的来电者的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" />

你应该好好去。

答案 1 :(得分:1)

如果您的所有合法用户都应该在您的公司内部LAN(在同一子网上),那么您可以使用类似this的方法将其锁定在IP地址上。如果您愿意,也可以将其限制为几个特定的​​IP掩码。

但是如果你想允许合法用户从任何地方点击它,那么这不是一个好方法。在这种情况下,身份验证会更好。

答案 2 :(得分:0)

您可以在IIS中添加安全限制,仅允许从域到Web服务的调用。

答案 3 :(得分:0)

除非您考虑使用Windows身份验证(因为请求来自您的域),否则执行此操作的首选方法是通过防火墙处于不同的级别。在该级别,您可以将传入流量限制为一组已知的IP地址。这只会到目前为止,因为IP可以被欺骗,但这是一个开放的服务,所以你去。一个更好的选择是 防火墙和windows auth。

或者,您可以通过查询OperationContext.Current.IncomingMessageProperties来检查WCF中的客户端IP地址。