我正在寻找一种启用或禁用某些IP来访问和添加我的WCF服务作为服务参考的方法。
目前可以公开添加我们的Web服务,如何添加IP过滤器? 或者我可以使用其他任何设置吗?
我已经看到Can I setup an IP filter for a WCF Service?关于将<IPFilter />
添加到 web.config ,但代码中的基本部分缺失,因此无法使用。
请注意; Web服务是更大项目的一部分,不能作为通过HTTPS(网站)提供的单个项目分开。
答案 0 :(得分:1)
由于我认为在WCF中没有自动方式,因此您有两个主要选项:
否则,你可以像你提到的那篇文章那样实现一个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地址: