WCF 身份验证 通过检查客户端IP

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

1 <?xml version="1.0" encoding="utf-8" ?>2 <configuration>3   <ip>192.168.0.71</ip>4   <ip>192.168.0.6</ip>5   <ip>127.0.0.1</ip>6   <ip>192.168.0.72</ip>7   <ip>192.168.0.136</ip>8   <ip>192.168.0.3</ip>9 </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

1 public static DataTable dtRunIp;2 public static string MapPath = ConfigurationManager.ConnectionStrings["configPath"].ConnectionString; 3        4 protected void Application_Start(object sender, EventArgs e)5 {6     dtRunIp = XMLHelper.XmlHelper.Instance().ReadRunIP(MapPath + "/Config/RunConfig.config", "//configuration/ip");7 }

判断IP许可

在服务中的应用:

 1 [ServiceContract] 2     public class SOAControl 3     { 4         string msgr = "无访问权限、服务器积极拒绝"; 5         //获取xml文档 6         [OperationContract] 7         public string GetXML(ref string msg) 8         { 9         10             if (Certificate.IsCanRead())11             {              12                 return XmlHelper.Instance().XmlDocumentToString(Global.MapPath + "/Control/Control.config".ToString());13             }14             else15             {16                 msg = msgr;17                 return null;18             }19         }

 1 public static bool IsCanRead() 2 { 3     string clientIp = Tools.Safe.Instance().ClientIp(); 4     bool r = false; 5     if (Global.dtRunIp.Rows.Count > 0) 6     { 7          for (int i = 0; i < Global.dtRunIp.Rows.Count; i++) 8          { 9               if (clientIp == Global.dtRunIp.Rows[i]["ip"].ToString())10               {11                   r = true;12               }13          }14     }15         return r;16 17 }

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>

时间: 2024-10-19 08:25:42

WCF 身份验证 通过检查客户端IP的相关文章

关于WEB Service&amp;WCF&amp;WebApi实现身份验证之WCF篇(1)

WCF身份验证一般常见的方式有:自定义用户名及密码验证.X509证书验证.ASP.NET成员资格(membership)验证.SOAP Header验证.Windows集成验证.WCF身份验证服务(AuthenticationService),这些验证方式其实网上都有相关的介绍文章,我这里算是一个总结吧,顺便对于一些注意细节进行说明,以便大家能更好的掌握这些知识. 第一种:自定义用户名及密码验证(需要借助X509证书) 由于该验证需要借助于X509证书,所以我们需要先创建一个证书,可以利用MS自

IIS 身份验证

IIS 支持以下身份验证模式: 匿名.如果不需要对客户端进行身份验证(或者使用自定义身份验证机制,如窗体身份验证),则可将 IIS 配置为允许匿名访问.在该事件中,IIS 创建一个 Windows 令牌来表示具有相同匿名(或客人)帐户的所有匿名用户.默认的匿名帐户是 IUSR_MACHINENAME,其中 MACHINENAME 是安装期间指定的计算机的 NetBIOS 名称. 基本.基本身份验证要求用户以用户名和密码的形式提供凭据来证明他们的身份.基本身份验证基于 Internet 标准 RF

14周翻译:SQL Server安全级别2的阶梯:身份验证 作者:Don Kiely,2014/06/18 该系列 本文是“Stairway系列:SQL Server安全性的阶梯”的一部分 链接:http://www.sqlservercentral.com/articles/Stairway+Series/109975/

正文: SQL Server提供了保护服务器和数据免受当今复杂攻击所需的一切.但是,在您有效使用这些安全功能之前,您需要了解您面临的威胁以及一些基本的安全概念.这第一阶梯级别提供了一个基础,以便您可以充分利用SQL Server中的安全功能,而不会浪费时间在功能上无所事事,以防止对数据的特定威胁. 验证是验证主体(需要访问SQL Server数据库的用户或进程)是谁或声称是什么的过程.主体需要唯一标识,以便SQL Server可以确定主体拥有哪些权限(如果有).正确的身份验证是提供对数据库对象安

ASP.NET --Form身份验证

本文收集自----MSDN 一:Forms 身份验证流程 在 Forms 身份验证方案中,应用程序直接从用户那里收集名字和密码等凭据,并自己判断这些信息的真实性.应用程序不使用 IIS 身份验证,但 IIS 身份验证设置可以影响 Forms 身份验证.作为一项原则,当您使用 Forms 身份验证时,请在 IIS 中启用匿名访问.否则,如果用户未通过 IIS 身份验证,他们甚至无法访问应用程序以便向 Forms 身份验证提供用户名和密码. 此方案中的数据流如下图所示. Forms 身份验证 此图说

ASP.NET中身份验证的三种方法

Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活.Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端.服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了. 问题来了,在实际是用中我们往往需要的是基于角色,或者说基于用户组的验

配置web服务基本用户身份验证,保证web站点的安全

IIS网站默认允许所有用户连接,如果对网站的安全性要求较高,网站只针对特定用户开放,就需要对用户进行验证.进行验证的主要方法有:匿名身份验证.基本身份验证.摘要式身份验证.Windows身份验证.这里只介绍如何配置基本身份验证.一.添加身份验证模块.1.打开"服务器管理器",点击"添加角色服务".2.在"安全性"中勾选要安装的3种身份验证方法,这里我已经安装过了.然后按照操作向导的提示完成即可.二.关闭匿名身份验证,启用基本身份验证.4种身份验证

解决WCF 调用方未由服务器进行身份验证或消息包含无效或过期的安全上下文令牌

错误描述: 1. WCF:调用方未由服务器进行身份验证 2. 无法处理消息.这很可能是因为操作“http://tempuri.org/ISCCLSvc/GetCarriersByWareHouse”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配.如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效.若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时. 3.或并发测试时,高并发出现问题2,实际案例:公司测试部门结果是并发到50就会出现问题2错误,

HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”

转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Header身份验证. 2.通过集成windows身份验证. 今天我就尝试了已第二种方式进行授权,首先发布Web Service到IIS,然后选择身份验证,启用Windows身份验证,禁用匿名身份验证 发布好了Web Servive就要在Client端调用了,我用的是VS2008,在client端项目引用中右

在 Linux 客户端配置基于 Kerberos 身份验证的 NFS 服务器

在这篇文章中我们会介绍配置基于 Kerberos 身份验证的 NFS 共享的整个流程.假设你已经配置好了一个 NFS 服务器和一个客户端.如果还没有,可以参考 安装和配置 NFS 服务器[2] - 它列出了需要安装的依赖软件包并解释了在进行下一步之前如何在服务器上进行初始化配置. 另外,你可能还需要配置 SELinux[3] 和 firewalld[4] 以允许通过 NFS 进行文件共享. 下面的例子假设你的 NFS 共享目录在 box2 的 /nfs: # semanage fcontext