我可以为 WCF 服务设置 IP 过滤器吗?
Posted
技术标签:
【中文标题】我可以为 WCF 服务设置 IP 过滤器吗?【英文标题】:Can I setup an IP filter for a WCF Service? 【发布时间】:2010-10-17 20:17:29 【问题描述】:我正在修改我的 WCF API 以包含一项仅应向内部 IP 地址公开的新服务。我的 API 中的所有服务都以 SOAP、POX 和 JSON 的形式提供。我正在寻找的是一种行为或某种东西,它允许我实现一个简单的 IP 地址过滤器,处理来自内部 IP 的请求并拒绝其他一切。我希望它在配置中工作,因为 API 中的所有其他服务都应该对 Internet 可用。我做了一些谷歌搜索,但在 WCF 中找不到类似的东西。我错过了什么吗?
【问题讨论】:
【参考方案1】:好的,我想通了,在我看来,它有点圆滑。 我将 IP 过滤器系统实现为服务行为,然后在 web.config 中将其添加到我的服务中。这是我的新网络配置行为部分:
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="RestrictedServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<IPFilter filter="172.*.*.* 127.0.0.1" />
</behavior>
</serviceBehaviors>
IPFilter 类实现 IDispatchMessageInspector 以尽快捕获请求,检查客户端 IP,如果与过滤器不匹配则抛出异常。如果有人有兴趣,我可以发布我的代码。
【讨论】:
【参考方案2】:如果您的服务托管在 IIS 中,那么您可以使用 IIS 在每个网站的基础上执行此操作(可能是每个应用程序,但我不知道)。
【讨论】:
是的,我想到了这一点,但试图避免这种解决方案。由于我只想保护一项服务,而让应用程序中的其他服务保持打开状态,因此我必须将应用程序分成两部分,将安全服务和非安全服务分开。以上是关于我可以为 WCF 服务设置 IP 过滤器吗?的主要内容,如果未能解决你的问题,请参考以下文章