wcf windows验证的好处_wcf 验证session - CSDN
精华内容
参与话题
  • 在分析一个WCF项目的过程中,遇到了一个问题,问题产生的根源在于下面的代码: EndpointAddress endPoint = new EndpointAddress(new Uri(string.Format(Constants.LocoServerBaseAddress, address) + address));...

    在分析一个WCF项目的过程中,遇到了一个问题,问题产生的根源在于下面的代码:

    EndpointAddress endPoint = new EndpointAddress(new Uri(string.Format(Constants.LocoServerBaseAddress, address) + address));

    抛出的错误为:A call to SSPI failed, see inner exception.然后当我查看inner exception的时候,看到了错误信息为:The target principal name is incorrect。

    开始看上去,被搞得一头雾水,根本不知道该如何去处理,不过还好,在网上看到了一篇外国文章(WCF on intranet with windows authentication: Kerberos or NTLM (Part 1)  ),看完以后,按照我的理解给翻译了出来,以备后用。呵呵,我总是这么的顺手牵羊啊。

     还是让我先来restore一下这个exception 发生的情形吧:

    首先,我将WCF的服务器端拷贝到另外一台机器上,这台机器和我本机不在同一个网段,均处于内网中,但是通过外网相连接。

    然后开启服务端,服务端总是开启一会儿就挂掉,客户端连接就会出现如上的错误。我打开系统的Event Viewer,看到了一个错误:

    The kerberos client received a KRB_AP_ERR_MODIFIED error from the server host/apaccmhkap038.apac.nsroot.net.  This indicates that the password used to encrypt the kerberos service ticket is different than that on the target server. Commonly, this is due to identically named  machine accounts in the target realm (APAC.NSROOT.NET), and the client realm.   Please contact your system administrator.

    很明显啊,客户端和服务端连接的时候,采用了kerberos验证方式。但是由于验证未通过,所以抛出了错误。

    这里我们肯定想问,什么是kerberos?是用来干什么的?

    其实,它属于windows认证机制中的方式之一,当一台机器中的WCF程序访问另外一台机器中的资源的时候,就会发生认证申请,kerberos 和 NTLM就是这两种认证方式。二者的具体定义请参见(http://msdn.microsoft.com/en-us/library/aa480609.aspx)和(http://msdn.microsoft.com/en-us/library/aa378749(v=vs.85).aspx),

    下面的图示展示了什么情况下采用哪种认证方式:

     

    Local User

    Local System

    Domain User

    Domain Machine

    Local User

    NTLM

    NTLM

    NTLM

    NTLM

    Local System

    Anonymous NTLM

    Anonymous NTLM

    Anonymous NTLM

    Anonymous NTLM

    Domain User

    NTLM

    NTLM

    Kerberos

    Kerberos

    Domain Machine

    NTLM

    NTLM

    Kerberos

    Kerberos

     如果WCF服务端和客户端都在本机,那么采用的是NTLM认证方式,所以不会出现错误,这也是为啥我在本机同时开启的时候,能够正常运行的原因。

    但是如果WCF服务端和客户端分布在不同的Domain,那么二者连接时候,认证方式则变成了kerberos。所以刚才当我将服务端放入外网的时候,在系统日志发现了当认证不匹配时kerberos错误。

    在上面的代码中,我做了一点修改,加上了如下的参数:

    EndpointAddress endPoint = new EndpointAddress(new Uri(string.Format(Constants.LocoServerBaseAddress, address) + address), EndpointIdentity.CreateSpnIdentity("MySystem/Service1"));

     加上以后,居然连接成功了。

    这里不论我给CreateSpnIdentity任何值,程序都能够正确的运行。

    所以,通过以上内容,我们的猜想如下:如果处在不同domain的服务端和客户端相互连接时,系统会首先使用机器名作为Uri,比如说,当我们连接net.tcp://remotemachine1:port/MyService的时候,WCF的客户端将会使用机器名称(EndpointIdentity.CreateSpnIdentity("remotemachine1"))作为认证的SPN,去调用service方法。当发现SPN存在但是不正确时,就转而使用NTLM认证,所以Client和Server就能连接了。当发现SPN存在并且正确时,就采用kerberos认证。当发现SPN不存在时,就直接采用kerberos认证,这也是错误出现的原因。

    解决方法就是,在创建EndpointAddress的时候,加上

    EndpointIdentity.CreateSpnIdentity("MySPNIdentity ")

     或者在配置文件中:

    <endpoint name="winservicenettcp"
                     binding="netTcpBinding"
                     bindingConfiguration="netTcp"
                     address="net.tcp://myserver:12345/WcfPerfTest"
                     contract="Contract.IPerfTest"
                     behaviorConfiguration="WcfTestBehavior">
             <identity>
               <servicePrincipalName value="MySPNIdentity "/>         
             </identity>
           </endpoint>

    其中字串可以为任何值,这样就能使用NTLM认证,从而避免错误出现。

    需要注意的是,认证发生是Client端连接Server端的时候。

    展开全文
  • 而在.net3.5下WCF程序默认是对客户端进行windows身份验证。所有如果不在同一个域中.net3.5下的WCF访问会失败,报"调用方未由服务进行身份验证",因为不在同一个域中验证会失败。 现在修改配置文件然.net4.0下的WCF...

    在.net4.0下WCF程序默认是不对客户端进行身份验证。而在.net3.5下WCF程序默认是对客户端进行windows身份验证。所有如果不在同一个域中.net3.5下的WCF访问会失败,报"调用方未由服务进行身份验证",因为不在同一个域中验证会失败。

     

    现在修改配置文件然.net4.0下的WCF也进行windows身份验证,因为进行身份验证就可以获取客户端的登录名等信息。

    配置文件如下

    使用这个配置文件就出现了“WCF问题:找不到具有绑定 WSHttpBinding 的终结点的与方案 http 匹配的基址。注册的基址方案是 [https]"错误。

    原因是security模型使用了Transport,如: <security mode="Transport">。Transport模型下是需要使用ssl和证书的,访问也是使用https。所有会报“注册的基址方案是 [https]"错误。只需要把安全模型修改为以下代码就可以

    获取客户端信息:

     

    展开全文
  • WCF是什么?它有什么优势?

    千次阅读 2015-03-09 15:54:39
    Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级...

    
    Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。

          根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communication)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

      WCF是建立在.Net Framework 2.0基础之上的,正式的版本应该会作为Windows Vista的核心部分而Release。然而,这并不代表WCF只能运行在Windows Vista下。只要安装了WinFX Runtime Components,在Windows XP和Windows 2003操作系统下,仍然可以使用。

      WCF是微软重点介绍的产品,因此也推出了专门的官方网站(http://windowscommunication.net),该网站有最新的WCF新闻发布,以及介绍WCF的技术文档和样例代码。

      二、WCF的优势

      在David Chappell所撰的《Introducing Windows Communication Foundation》一文中,用了一个活鲜鲜的例子,来说明WCF的优势所在。假定我们要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。该租车预约服务会被多种应用程序访问,包括呼叫中心(Call Center),基于J2EE的租车预约服务以及合作伙伴的应用程序(Partner Application),如图所示:

      从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。(注:这种说法仅仅是从功能的角度。事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已经改变了通常的开发模式。)因此,对于上述汽车预约服务系统的例子,利用WCF,就可以解决包括安全、可信赖、互操作、跨平台通信等等需求。开发者再不用去分别了解.Net Remoting,ASMX等各种技术了。

      概括地说,WCF具有如下的优势:

      1、统一性

      前面已经叙述,WCF是对于ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合。由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。

      2、互操作性

      由于WCF最基本的通信机制是SOAP(Simple Object Access Protocol 简易对象访问协议),这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信,如下图所示:

      可以跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器(如WebSphere,WebLogic)。应用程序可以运行在Windows操作系统下,也可以运行在其他的操作系统,如Sun Solaris,HP Unix,Linux等等。如下图所示:

      3、安全与可信赖

      WS-Security,WS-Trust和WS-SecureConversation均被添加到SOAP消息中,以用于用户认证,数据完整性验证,数据隐私等多种安全因素。

      在SOAP 的header中增加了WS-ReliableMessaging允许可信赖的端对端通信。而建立在WS-Coordination和WS- AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions)。

      4、兼容性
      WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。
            至于WFC的性能,微软Connected Frameworks Team的Saurabh Gupta (PM)最近发布了一个WCF的性能测试报告
    作者使用WCF比较了四种常用的分布式技术
    •ASP.NET Web Services (ASMX)
    •Web Services Enhancements (WSE)
    •.NET Enterprise Services (ES)
    •.NET Remoting

    展开全文
  • 在IIS上部署WCF服务详细过程

    万次阅读 2013-07-11 17:52:54
    1 新建项目-WCF-WCF服务应用程序 然后选择该项目右健,点击生成(切记:项目一定要生成) 2.开始发布服务:  打开Internet信息服务(IIS)管理器

    环境:VS2010、Win7

    一、新建项目-WCF-WCF服务应用程序

    然后选择该项目右健,点击生成(切记:项目一定要生成)!

    二、开始发布服务:

      1打开Internet信息服务(IIS)管理器,选中网站-右键-添加网站



     弹出添加网站窗口,按着截图填写就行,


    2.填写上图后点击“连接为(C)...”,选择“特定用户”,然后单击“设置”



    单击“设置”后弹出  “设置凭据”窗口,按照截图提示填写.注意:下图的用户名为电脑登陆用户名,非本机机器名(选中“计算机”--右键--点击“管理”--选中“本地用户和组”--双击“用户”,会看到你自己电脑用户名


    3.以上填写完后,点击确定。出现新建的站点。


    4.编辑身验证,选中新建的站点:“WCFService”--双击--“身份验证”,然后按照下边截图修改状态(更改状态时候选中然后右键--启用)



    5.选中“应用程序池”,然后右击“WCFService”--选择“高级设置”(每建一个新站点,在应用程序池中会生成对应的应用程序池)



    按照下边截图修改


    6.允许“内容检索(使用HHTP)"通过防火墙,如果还是不能访问网站就直接关闭防火墙


    7.重要:

    选中新建站点中的源码项目,然后右击--选择“转换为应用程序”--然后单击“连接为”--然后看到熟悉的一幕了吧,和上面一样,选择--”特定用户“--单击“设置”,然后填写电脑登录名和密码,然后点击“确定”





    8.选中--源码“WcfService”--双击“目录浏览”--此操作主要是查看是否启动,如果没有启动,选择启动,下图是启动后的状态。



    9最后一步,浏览发布的服务。选中站点“WCFService”然后点击”浏览网站“







    看到如上的页面,说明服务已部署成功。



    展开全文
  • 老徐的博客:文章目录

    千次阅读 2010-01-11 21:32:00
    Posted on 2009-05-22 23:35 Frank Xu Lei 阅读(1850) 评论(18) 编辑 收藏 网摘 所属分类: 老徐的博客:文章目录, SOA and EAI <!--...
  • WCF教程一之WCF是什么,能做什么

    千次阅读 2017-05-02 20:00:15
    WCF教程
  • WCF身份验证之用户名密码认证

    千次阅读 2017-01-03 11:59:28
    WCF支持多种认证技术,例如Windowns认证、X509证书、Issued Tokens、用户名密码认证等,在跨Windows域分布的系统中,用户名密码认证是比较常用的,要实现用户名密码认证,就必须需要X509证书,用来加密用户名... ... 创建服
  • WCF4.0 –- RESTful WCF Services (4) (Basic Security)

    万次阅读 热门讨论 2011-10-17 10:34:40
    在REST架构的WCF服务中,它不像一般的WCF服务绑定,有配套的安全模式,实现起来那么简单。REST WCF服务只能在传输层加密,而一般的WCF 服务可以在消息层加密。因此 REST WCF服务启用ASP.NET兼容模式后,它的安全是由...
  • 【实践】WCF 传输安全 1 前期准备之证书制作 【实践】WCF传输安全2:基于SSL的WCF匿名客户端 【实践】WCF传输安全3:基于SSL的WCF对客户端验证 【实践】WCF传输安全3:基于SSL的WCF对客户端验证 WCF4.0 -- ...
  • C#学习笔记32——WCF

    千次阅读 2011-09-04 23:17:21
    Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,...
  • 介绍VS2008中的WCF工具

    千次阅读 2008-03-27 11:04:00
    WCF开发工具 大家都听说WCF 是很酷的.net技术,可是如何迈出激动人心的WCF服务开发的第一步呢?大家也都知道,开发一个服务,并不只是完成服务本身的功能,还要写主机程序来运行服务,写客户端程序来测试服务,如果...
  • WCF 学习总结1 -- 简单实例

    万次阅读 热门讨论 2011-04-22 21:30:00
    从VS2005推出WCF以来,WCF逐步取代了Remoting, WebService成为.NET上分布式程序的主要技术。WCF统一的模型整合了以往的 WebService、Remoting、MSMQ 等技术,让分布式开发变得更加简单,方便,快捷。 (上图选自...
  • WCF Windows集成身份验证详细步骤。

    千次阅读 2013-09-09 10:00:12
    How to: Use basicHttpBinding with Windows Authentication and TransportCredentialOnly in WCF from Windows Forms  7 out of 29 rated this helpful - Rate this topic   
  • 概述 第二篇我们稍微提升一点难度,介绍一下BizTalk当中的WCFWindows Communication Foundation)适配器,该适配器共分为两种:接收适配器和发送适配器。使用WCF接收适配器可以接收WCF服务请求。WCF接收适配器接收...
  • WCF测试客户端(WCF Test Client)

    万次阅读 2013-08-16 00:53:22
    WCF开发工具 大家都听说WCF 是很酷的.net技术,可是如何迈出激动人心的WCF服务开发的第一步呢?大家也都知道,开发一个服务,并不只是完成服务本身的功能,还要写主机程序来运行服务,写客户端程序来测试服务,如果...
  • (六)、WCF 安全

    千次阅读 2010-08-27 15:29:00
     Overview:Windows身份验证用户名/密码证书验证发布口令 1.1 身份验证:WCF中提供多种身份验证方式: 1.2 授权:WCF支持多种角色库,比如Windows 组、LDAP、ASP.NET Provider 1.3 保密性:...
  • WCF 发布与部署IIS所遇到的问题 (解决404.17、.svc无法读取问题) 那如果是产品上线 要部署 服务器上 那情况就会复杂的多了。 1.首先要要讲wcf类库发布。 2.要部署的服务器 确保已经有.NetFrameWork 3.0+  3.安装...
  • WCF、WPF—学习笔记

    千次阅读 2011-09-19 15:07:24
     Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口。 通信双方的沟通方式,由合约来订定。 通信双方所遵循的通信方法,由协议绑定来订定。 通信期间的安全性,由双方约定的...
  • Windows Communication Foundation (WCF) Test Client (WcfTestClient.exe) 是随Visual Studio提供的用来测试WCF/Web Service一个GUI工具。 如何启动wcfTestClient.exe 一般是进入到 Visual Studio Tools —>...
  • WCF的用户名+密码认证方式

    万次阅读 多人点赞 2011-08-02 22:58:00
    今天在做Master Data Service(后面简称MDS)项目时需要通过WCF来使用MDS的API,从而对MDS的数据进行操作。在这个过程中,遇到了一个棘手的问题,就是在客户端调用Web Service时的身份认证问题,于是乎对WCF的认证...
1 2 3 4 5 ... 20
收藏数 6,309
精华内容 2,523
关键字:

wcf windows验证的好处