启用或禁用某些IP访问我的WCF服务

时间:2014-04-07 08:34:21

标签: c# web-services wcf

我正在寻找一种启用或禁用某些IP来访问和添加我的WCF服务作为服务参考的方法。

目前可以公开添加我们的Web服务,如何添加IP过滤器? 或者我可以使用其他任何设置吗?

我已经看到Can I setup an IP filter for a WCF Service?关于将<IPFilter />添加到 web.config ,但代码中的基本部分缺失,因此无法使用。

请注意; Web服务是更大项目的一部分,不能作为通过HTTPS(网站)提供的单个项目分开。

2 个答案:

答案 0 :(得分:1)

由于我认为在WCF中没有自动方式,因此您有两个主要选项:

  1. 如果您想要安全的东西,除了您的环境使用防火墙之外,不想实施任何东西,您可以配置防火墙以拒绝来自特定IP地址的连接。
  2. 否则,你可以像你提到的那篇文章那样实现一个IP过滤器(即作为serviceBeharvior,这里没有描述),或者更简单地作为所有公共webservice方法调用的单个私有方法,如果抛出错误代码,不允许客户端的IP(基于文件或数据库中的白名单或黑名单)。

    /// <summary>
    /// Get the client IP address.
    /// </summary>
    private string GetClientIpAddress()
    {
        string result = string.Empty;
        try
        {
            OperationContext context = OperationContext.Current;
            MessageProperties messageProperties = context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
            result = endpointProperty.Address;
        }
        catch (Exception ex)
        {
            logger.Error(ex);
        }
    
        return result;
    }
    
    /// <summary>
    /// Returns <code>true</code> if the current IP address is allowed
    /// to access the webservice method, <code>false</code> otherwise.
    /// </summary>
    private bool CheckIPAccessRestriction()
    {
        bool result = false;
        List<string> allowed = GetAllowedIpAddressesList();
        if (allowed.Count() == 0)
        {
            result = true;
        }
        else
        {
            var ip = GetClientIpAddress();
            result = allowed.Contains(ip);
        }
    
        return result;
    }
    

答案 1 :(得分:0)

如果您在IIS中托管Web服务,则可以在那里限制IP地址:

enter image description here