WCF 身份验证 通过检查客户端IP
2012-03-11 16:14
399 查看
WCF 身份验证
功能描述:
服务运行的时候,通过配置文件获取所有可访问SOA端的服务IP。每次客户调用服务时获取IP对比判定通过。
以下是获取客户端IP的代码:
XML 存放可访问IP
页面加载时获取所有可访问IP
判断IP许可
在服务中的应用:
WCF的配置文件设置
注意事项,在客户端访问的时候是IP6的,可以直接将IP保存到XML文件中,或禁用IP6
源码下载 http://download.csdn.net/detail/wujiang1984/4131313 点击打开链接
功能描述:
服务运行的时候,通过配置文件获取所有可访问SOA端的服务IP。每次客户调用服务时获取IP对比判定通过。
以下是获取客户端IP的代码:
/************************************************************************************* * 代码:吴蒋 * 时间:2012.02.07 * 说明:安全类 * 其他: * 修改人: * 修改时间: * 修改说明: ************************************************************************************/ using System.ServiceModel; using System.ServiceModel.Channels; namespace Tools { public class Safe { public static Safe Instance() { return new Safe(); } public string ClientIp() { OperationContext context = OperationContext.Current; MessageProperties properties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; return endpoint.Address; } public string ClientPort() { OperationContext context = OperationContext.Current; MessageProperties properties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; return endpoint.Port.ToString(); } public string ClientIpAndPort() { OperationContext context = OperationContext.Current; MessageProperties properties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; return endpoint.Address + ";" + endpoint.Port.ToString(); } } }
XML 存放可访问IP
<?xml version="1.0" encoding="utf-8" ?> <configuration> <ip>192.168.0.71</ip> <ip>192.168.0.6</ip> <ip>127.0.0.1</ip> <ip>192.168.0.72</ip> <ip>192.168.0.136</ip> <ip>192.168.0.3</ip> </configuration>
#region 特殊函数 /// <summary> /// 匹配允许访问IP /// </summary> /// <param name="path">文件路径</param> /// <param name="node">节点名称</param> /// <returns>转换为DataTable</returns> public DataTable ReadRunIP(string path, string node) { XmlDocument doc = new XmlDocument(); doc.Load(path); DataTable dt = new DataTable(); dt.Columns.Add("ip", typeof(string)); XmlNodeList xnlist = doc.SelectNodes(node); if (xnlist.Count > 0) { for (int i = 0; i < xnlist.Count; i++) { DataRow dr = dt.NewRow(); dr["ip"] = xnlist[i].InnerText; dt.Rows.Add(dr); } } return dt; } #endregion
页面加载时获取所有可访问IP
public static DataTable dtRunIp; public static string MapPath = ConfigurationManager.ConnectionStrings["configPath"].ConnectionString; protected void Application_Start(object sender, EventArgs e) { dtRunIp = XMLHelper.XmlHelper.Instance().ReadRunIP(MapPath + "/Config/RunConfig.config", "//configuration/ip"); }
判断IP许可
在服务中的应用:
[ServiceContract] public class SOAControl { string msgr = "无访问权限、服务器积极拒绝"; //获取xml文档 [OperationContract] public string GetXML(ref string msg) { if (Certificate.IsCanRead()) { return XmlHelper.Instance().XmlDocumentToString(Global.MapPath + "/Control/Control.config".ToString()); } else { msg = msgr; return null; } }
public static bool IsCanRead() { string clientIp = Tools.Safe.Instance().ClientIp(); bool r = false; if (Global.dtRunIp.Rows.Count > 0) { for (int i = 0; i < Global.dtRunIp.Rows.Count; i++) { if (clientIp == Global.dtRunIp.Rows[i]["ip"].ToString()) { r = true; } } } return r; }
WCF的配置文件设置
<?xml version="1.0"?> <configuration> <system.serviceModel> <bindings> <wsHttpBinding> <binding name="NoneSecurity" maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false"> <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/> <security mode="None"/> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="Control.Service.SOAControlBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="Control.Service.SOAControlBehavior" name="Control.Service.SOAControl"> <endpoint address="" binding="wsHttpBinding" contract="Control.Service.SOAControl" bindingConfiguration="NoneSecurity"> <identity> <dns value="localhost"/> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> </system.serviceModel> </configuration>
注意事项,在客户端访问的时候是IP6的,可以直接将IP保存到XML文件中,或禁用IP6
源码下载 http://download.csdn.net/detail/wujiang1984/4131313 点击打开链接
相关文章推荐
- WCF 身份验证 通过检查客户端IP
- WCF 身份验证 通过检查客户端IP
- 通过使用客户端证书调用 Web 服务进行身份验证(zz)
- 通过使用客户端证书调用 Web 服务以便在 ASP.NET Web 应用程序中进行身份验证
- SMTP客户端未通过身份验证等多种错误解决方案分享
- 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
- 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
- ERROR:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP
- SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: Authentication
- 通过使用客户端证书调用 Web 服务进行身份验证(zz)
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- 通过使用客户端证书调用 Web 服务进行身份验证{转}
- ERROR:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- 通过端口 8080 连接到主机 localhost 的 TCP/IP 连接失败。错误:“驱动程序收到意外的登录前响应。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受
- 解决: 关于配置局域网内通过一台WEB服务器连接到域服务器进行身份验证的IP设置
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
- 如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。
- 解决AX2012通过AXC配置文件打开客户端时出现WCF 错误