我可以为 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 过滤器吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Dummies 筛选 Azure 日志或 WCF 数据服务筛选器

我可以在不设置内容类型的情况下调用 WCF 服务吗?

服务器的数据怎样恢复?

设置SSH登录IP白名单,过滤非法IP密码登录请求

我可以使用 PicNet 表过滤器设置默认搜索吗?

特定路由的快速 ip 过滤器?