2009-12-14 74 views
2

我有一个WCF服务,我只希望我的应用程序有权访问。我的应用程序由使用JQuery和Silverlight界面的传统Web界面组成。这些界面都不需要用户登录。WCF - 防止未经授权的客户端

有没有一种方法可以告诉WCF服务只允许源自我的域的客户端?如果是这样,怎么样?

谢谢!

回答

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" /> 

你应该很好去。

+0

尽管如此,我认为如果用户具有与域用户相同的用户名和密码(不太可能,我知道),那么他们将被认证为域用户。 – 2009-12-14 16:48:59

+0

不,他们不会 - 他们需要拥有真正的Windows凭据 - 来自您的域的Windows安全令牌 - 不仅仅是偶然的同名。 – 2009-12-14 17:18:51

+0

那么你如何解释表格中的第三列: http://msdn.microsoft.com/en-us/library/ms164725.aspx – 2009-12-14 17:32:54

0

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

0

除非您考虑Windows身份验证(因为请求来自您的域),否则通过防火墙执行此操作的首选方式将处于不同的级别。在该级别,您可以将传入流量限制为已知的一组IP地址。这只会走得这么远,因为IP可能被欺骗,但这是一个开放的服务,所以你去了。一个更好的替代方案是两个防火墙和Windows身份验证。

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

1

如果您的所有合法用户都应该在您的企业内部LAN上(在同一子网上),那么您可以使用类似this的方法通过IP地址将其锁定。如果你愿意的话,你也可以将它固定在几个特定的​​IP掩码上。

但是,如果您想允许合法用户从任何地方打它,那么这不是一个好方法。在这种情况下,认证会更好。

相关问题