我有一个WCF服务,我只希望我的应用程序有权访问。我的应用程序由使用JQuery和Silverlight界面的传统Web界面组成。这些界面都不需要用户登录。WCF - 防止未经授权的客户端
有没有一种方法可以告诉WCF服务只允许源自我的域的客户端?如果是这样,怎么样?
谢谢!
我有一个WCF服务,我只希望我的应用程序有权访问。我的应用程序由使用JQuery和Silverlight界面的传统Web界面组成。这些界面都不需要用户登录。WCF - 防止未经授权的客户端
有没有一种方法可以告诉WCF服务只允许源自我的域的客户端?如果是这样,怎么样?
谢谢!
是的,当然,您可以 - 只需要呼叫者的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" />
你应该很好去。
您可以在IIS中添加安全限制,以允许从域调用web服务。
除非您考虑Windows身份验证(因为请求来自您的域),否则通过防火墙执行此操作的首选方式将处于不同的级别。在该级别,您可以将传入流量限制为已知的一组IP地址。这只会走得这么远,因为IP可能被欺骗,但这是一个开放的服务,所以你去了。一个更好的替代方案是两个防火墙和Windows身份验证。
或者,您可以通过查询OperationContext.Current.IncomingMessageProperties
来检查WCF中的客户端IP地址。
如果您的所有合法用户都应该在您的企业内部LAN上(在同一子网上),那么您可以使用类似this的方法通过IP地址将其锁定。如果你愿意的话,你也可以将它固定在几个特定的IP掩码上。
但是,如果您想允许合法用户从任何地方打它,那么这不是一个好方法。在这种情况下,认证会更好。
尽管如此,我认为如果用户具有与域用户相同的用户名和密码(不太可能,我知道),那么他们将被认证为域用户。 – 2009-12-14 16:48:59
不,他们不会 - 他们需要拥有真正的Windows凭据 - 来自您的域的Windows安全令牌 - 不仅仅是偶然的同名。 – 2009-12-14 17:18:51
那么你如何解释表格中的第三列: http://msdn.microsoft.com/en-us/library/ms164725.aspx – 2009-12-14 17:32:54