WCF 身份验证 通过检查客户端IP
来源:互联网 发布:数据库业务流程图 编辑:程序博客网 时间:2024/05/21 12:43
WCF 身份验证
功能描述:
服务运行的时候,通过配置文件获取所有可访问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>
页面加载时获取所有可访问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"); }
#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 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; }
在服务中的应用:
[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; } }
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
- Silverlight中利用WCF获取客户端IP
- WCF/WebService如何获取客户端IP,端口
- Wcf 客户端代理生成 通过SvcUtil.exe
- 会话WCF服务 -> C# WCF COM 客户端 双工通信 -> C++通过COM调用C# WCF客户端
- WCF Windows身份验证
- WCF身份验证服务
- WCF----UserName身份验证全记录
- WCF服务如何获得客户端IP地址信息
- 某些IE客户端无法通过WCF获取数据的解决方案
- wcf客户端通过URL地址调用服务器端地址
- WCF 系列:通过SvcUtil.exe生成客户端代码和配置
- android客户端通过wcf与sqlserver数据库交换数据
- [WCF Security] 3. X509 身份验证
- WCF 之UserName身份验证全记录
- WCF身份验证之X509证书
- WCF使用X509证书身份验证
- Struts2的第一个应用实例
- VMWare8运行Mac OS Lion时安装VMTools的问题
- 动态设置线程数量的例子
- win7下设置cmd操作mysql的环境变量
- UML建模——Rational Rose实验收获
- WCF 身份验证 通过检查客户端IP
- Struts2常量介绍及说明
- *printf()格式化串安全漏洞分析(下) (转)
- int 和 unsigned
- 远离运动减肥常犯的5个错误
- 用API实现定时器画出DDA直线的演示
- 关于两次fork
- Hadoop入门系列2——安装,配置,编程,部署和运行
- ASP.NET 关于用户登录