摘要:

我们为应用建立安全保障体系的一个重要的目的在于:通过权限控制让用户只能执行被允许的功能,访问被许可的资源。这就是本系列文章讨论的主题授权。对于WCF服务来说,一个服务具有若干操作,而这些操作由于提供的功能或者内部访问的资源不同,需要进行相应的授权。在正式介绍WCF授权之前,先来谈谈两个重要的概念:身份与安全主体。
阅读全文
posted @ 2011-06-29 22:56
Artech
阅读(9381)
推荐(26)
摘要:

多年之前,我写了一篇通过WCF扩展实现上下文信息从客户端自动传递到服务端的文章,其实现机制很简单:将上下文信息存放到SOAP Header进行传递。那么对于非SOAP消息的RESTful服务就不使用了。为了解决这个问题,我们可以将存放上下文信息的地方从SOAP Header替换成HTTP Header。这篇为你消息讲述具体的实现[源代码从这里下载]。
阅读全文
posted @ 2011-06-28 20:14
Artech
阅读(7763)
推荐(17)
摘要:

对消息进行签名和加密分别解决了消息的一致性和机密性问题。而最终是仅仅采用签名还是签名与加密共用取决于契约中对消息保护级别的设置。但是具体的签名和加密在整个WCF框架体系中如何实现?是采用对称加密还是非对称加密?密钥如何而来?相信这些问题在本篇文章中你会找到答案
阅读全文
posted @ 2011-06-27 07:40
Artech
阅读(3150)
推荐(11)
摘要:

在《上篇》中,我们着重讨论了消息的保护等级如果在契约中定义,定义在不同契约(服务契约、错误契约和消息契约)中的消息保护等级具有怎样的层级关系,以及在默认情况下各种绑定采用怎样的保护等级。在下篇中,我们进一步来探讨消息保护等级和绑定的关系。
阅读全文
posted @ 2011-06-21 23:04
Artech
阅读(4394)
推荐(9)
摘要:

到目前为止,对于WCF安全传输的三个方面,我们已经对认证进行了详细的介绍,现在我们来关注另外两个话题:消息的一致性和机密性,两者又统称为消息保护(Message Protection)。消息安全等级指的是对整个消息或者消息的某个部分实施安全保护采用的等级。按照级别由低到高,WCF支持三种不同的安全等级
阅读全文
posted @ 2011-06-20 23:20
Artech
阅读(5698)
推荐(15)
摘要:

前面介绍Windows认证和用户名/密码认证这两种典型的客户端认证模式,我们最后来介绍最后一种客户端认证方式,即客户端凭证类型为X.509证书时服务端采用的认证,简称为证书认证。本篇文章主要涉及两个主题:在客户端如何设置X.509证书作为客户端凭证;在服务端如何设置不同的模式来对客户端的证书凭证进行认证
阅读全文
posted @ 2011-06-15 22:01
Artech
阅读(10058)
推荐(7)
摘要:

对于基于Internet的应用,基于用户名和密码的认证方式是最为常用的,而WCF为你提供了不同模式的用户名认证方式:Windows、MembershipProvider和Custom
阅读全文
posted @ 2011-06-13 21:13
Artech
阅读(16209)
推荐(14)
摘要:

结束了服务认证的介绍之后,我们接着介绍WCF双向认证的另一个方面,即服务对客户端的认证,简称客户端认证。客户端认证采用的方式决定于客户端凭证的类型,内容只要涉及基于以下三种典型客户凭证类型的认证:Windows、用户名和X.509证书。先来谈谈Windows认证
阅读全文
posted @ 2011-06-12 21:17
Artech
阅读(9367)
推荐(7)
摘要:

在采用TLS/SSL实现Transport安全的情况下,客户端对服务证书实施认证。但是在默认情况下,这种认证仅仅是确保服务证书的合法性(通过数字签名确保证书确实是由申明的CA颁发)和可信任性(证书或者CA证书存储于相应的可信赖存储区)。而WCF提供服务证书并不限于此,客户端对服务认证的模式应该是这样的:服务端预先知道了服务的身份,在进行服务调用之前,服务端需要提供相应的凭证用以辅助客户端确认调用的服务具有预先确定的身份。对于这样的服务认证模式,具有两个重要的概念,即服务凭证和服务身份。
阅读全文
posted @ 2011-06-12 11:40
Artech
阅读(10862)
推荐(11)
摘要:

上一篇演示的是绑定类型为NetTcpBinding情况下基于TLS/SSL的Transport安全模式的实现,接下来我们改用另外一种绑定:WS2007HttpBinding。对于基于HTTP的绑定,Transport安全模式的实现方式又根据寄宿方式的不同而具有一定的差异
阅读全文
posted @ 2011-06-02 22:32
Artech
阅读(15236)
推荐(9)
摘要:

在接下来的系列文章中我们正是讨论关于身份认证的主题。在前面我们已经谈到了,WCF中的认证属于“双向认证”,既包括服务对客户端的认证(以下简称客户端认证),也包括客户端对服务的认证(以下简称服务认证)。对于TLS/SSL来说,客户端和服务在为建立安全上下文而进行的协商过程中会验证服务端的X.509证书如否值得信任。对于服务证书的验证实际上可以看成是一种服务认证,或者说TLS/SSL对证书的验证可以看成是WCF服务认证的一个环节。
阅读全文
posted @ 2011-05-29 14:14
Artech
阅读(10122)
推荐(12)
摘要:

对于常用的几种绑定类型,它们都支持怎样的安全模式,以及针对各种安全模式可以采用怎样的认证方式(通过客户端凭证类型决定),这些都在前面的一系列文章中进行了详细的介绍。接下来我们通过表格的形式对不同类型的系统预定义对不同的安全模式进行一下总结。
阅读全文
posted @ 2011-05-28 11:17
Artech
阅读(7242)
推荐(11)
摘要:

在前面两篇中,我们详细地介绍了四种基于HTTP的绑定分别支持的安全模式,已经在相应的安全模式下可以采用怎样的客户端凭证。在本篇文章中,我们安全线相同的方式来介绍三种基于局域网的绑定,即NetNamedPipeBinding、NetTcpBinding与 NetMsmqBinding。
阅读全文
posted @ 2011-05-27 22:48
Artech
阅读(8163)
推荐(5)
摘要:

在上一篇文章中,我们详细地介绍了BasicHttpBinding具有怎样的安全模式的支持,已经在各种安全模式下分别可以采用怎样的客户端凭证。接下来我们来进一步分析另外三个基于HTTP的绑定,即WSHttpBinding、WS2007HttpBinding和WSDualHttpBinding。
阅读全文
posted @ 2011-05-26 20:24
Artech
阅读(9980)
推荐(7)
摘要:

整个安全传输是在WCF的信道层进行的,而绑定是信道层的缔造者,所以终结点采用哪种类型的绑定以及对绑定的属性进行怎样的设置决定了信道层最终采用何种机制实现消息的安全传输。具体来说,我们可以通过绑定设置最终采用的安全模式,以及基于相应安全模式下进行认证和消息保护的行为。至于认证,最终采用怎样的认证方式是由客户端凭证决定的。
阅读全文
posted @ 2011-05-25 18:32
Artech
阅读(11345)
推荐(10)
摘要:

在《上篇》中,我们谈到了常用的认证方式:用户名/密码认证和Windows认证。在下篇中,我们着重来介绍另外一种重要的凭证类型:X.509证书,以及针对X.509证书的认证方式。不过为了让读者能够真正地全面地了解X.509证书,本篇文章还提供一些基本的关于非对称加密的背景知识。
阅读全文
posted @ 2011-05-23 20:55
Artech
阅读(12741)
推荐(19)
摘要:

如果要给认证下一个定义,我个人的倾向这样的定义:认证是确定被认证方的真实身份和他或她申明(Claim)的身份是否相符的行为。认证方需要被认证方提供相应的身份证明材料,以鉴定本身的身份是否与声称的身份相符。在计算机的语言中,这里的身份证明有一个专有的名称,即“凭证”,或者用户凭证、认证凭证。
阅读全文
posted @ 2011-05-23 07:39
Artech
阅读(13470)
推荐(16)
摘要:

WCF的安全体系主要包括三个方面:传输安全、授权或者访问控制以及审核。而传输安全又包括两个方面:认证和消息保护。认证帮助客户端或者服务确认对方的真实身份,而消息保护则通过签名和加密实现消息的一致性和机密性。WCF采用两种不同的机制来解决这三个涉及到传输安全的问题,我们一般将它们称为不同的安全模式,即Transport安全模式和Message安全模式。
阅读全文
posted @ 2011-05-22 16:09
Artech
阅读(20105)
推荐(38)
摘要:

当我们在设计一个框架的时候,必然会涉及一系列的配置。为了让使用者更好地使用你提供的框架,让他们能够容易地维护这些配置是一项基本的要求。对于一些配置过于复杂的框架,比如EnterLib,比如WCF,往往会提供一个配置的工具。但是,不过这样的配置工具是否提供,手工编译配置文件是在所难免的。如果在通过VS编辑配置的时候,能够提供智能感知和提示性描述的支持,这无疑会使配置的编辑变得非常的容易。这里是一个简单的例子。
阅读全文
posted @ 2011-04-20 16:00
Artech
阅读(6021)
推荐(7)
摘要:

大家都知道,我们具有三种定义可序列化类型的方式:在类型上应用SerializableAttribute特性;应用DataContractAttribute/DataMemberAttribute特性和实现ISerializable接口。当你通过继承一个现有的类来定义你需要被序列化的类,如果这个父类实现了ISerializable接口,如果定义不当,就会出现反序列化的问题。而且这个我们可能经常都不注意。
阅读全文
posted @ 2011-04-14 21:56
Artech
阅读(8647)
推荐(16)
摘要:

条件编译,顾名思义,就是根据在编译时指定的条件决定最后需要编译的代码。条件编译是我们可以针对某些特性的环境编写相应的代码,比如有写的代码只需要在Debug模式下才需要执行,有些代码仅仅是为了在SIT或者UAT环境下有效地进行Troubleshooting,而在Production环境下则不应该执行。通过条件编译机制,我们可以针对某中特定的“条件编译符(Conditional Compilation Symbol)”编写相应的代码。在进行最终编译的时候,通过指定的条件编译符,编译器判断这些特殊的代码是否应该被编译。
阅读全文
posted @ 2011-04-06 16:21
Artech
阅读(8992)
推荐(11)
摘要:

《上篇》主要介绍如何通过DataBinder实现批量的数据绑定,以及如何解决常见的数据绑定问题,比如数据的格式化。接下来,我们主要来谈谈DataBinder的设计,看看它是如何做到将作为数据源实体的属性值绑定到界面对应的控件上的。
阅读全文
posted @ 2011-03-27 21:19
Artech
阅读(8695)
推荐(19)
摘要:

昨天写了《三种属性操作性能比较》,有个网友写信问我一个问题:从性能上看,Expression Tree和IL Emit孰优孰劣?虽然我在回信中作了简单的回答,但不知道这个网友是否懂我的意思。反正今天呆在家里也没事儿,干脆再就这个话题再写一篇文章。
阅读全文
posted @ 2011-03-27 15:30
Artech
阅读(8414)
推荐(30)
摘要:

在《上篇》中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit。本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression Tree和通过Delegate的静态方法CreateDelegate创建相应的委托进行属性的赋值和取值
阅读全文
posted @ 2011-03-26 02:09
Artech
阅读(14278)
推荐(15)
摘要:

在《一句代码实现批量数据绑定》中,我通过界面控件ID与作为数据源的实体属性名之间的映射实现了批量数据绑定。由于里面频繁涉及对属性的反射——通过反射从实体对象中获取某个属性值;通过反射为控件的某个属性赋值,所以这不是一种高效的操作方式。为了提升性能,我通过IL Emit的方式创建了一个PropertyAccessor组件,以实现高效的属性操作。如果你看了我在文中给出的三种属性操作性能的测试结果,相信会对PropertyAccessor的作用有深刻的印象。
阅读全文
posted @ 2011-03-24 21:23
Artech
阅读(7921)
推荐(16)
摘要:

对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定。如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定。为了验证这种想法,我写了一个小小的组件
阅读全文
posted @ 2011-03-23 22:53
Artech
阅读(10111)
推荐(45)
摘要:

Oracle uses a Data Dictionary to store details of all the Tables, Columns etc.. (check out the associated Data Model). You will normally be interested only in your own Tables, which are provided by the 'USER' views, which are for the User who is currently logged in.
The System Administrator or DBA will usually be interested in the 'ALL' Views, which show data for all Users.
阅读全文
posted @ 2011-03-18 14:06
Artech
阅读(3628)
推荐(2)
摘要:

本篇文章讨论可空值类型(Nullable)的转换,却确地说是如何将一种类型的值对象转换成相应的可空值。这来源于今天我们的一个成员遇到的一个小问题,我经过一些整理写了这篇文章。虽然没有什么技术含量可言,也希望对某些读者带来帮助。
阅读全文
posted @ 2011-03-17 20:20
Artech
阅读(26444)
推荐(34)
摘要:

[J.D. Meier's Blog]“Life is like skiing. Just like skiing, the goal is not to get to the bottom of the hill. It’s to have a bunch of good runs before the sun sets.” – Seth Godin
It's been a good run. After more than 10 years in patterns & practices, I'm on to my next adventure here at Microsoft.
For this post, I wanted to take a stroll down memory lane. During my time at patterns & practices,
阅读全文
posted @ 2011-03-17 12:47
Artech
阅读(1982)
推荐(4)
摘要:

对于数据库设计来说,多对多(或者一对多)是一种常见的数据关系,比如联系人和地址之间的关系。我们通常采用建立关系表的方式来表示这种关系,比如我们创建一张表来存储联系人和地址之间的关系。如果我们最终需要通过存储过程的方式来维护他们之间的关系,该如何做呢?本篇文章给你一个具体的例子来演示如果采用存储过程来建立和删除实体之间的关系。
阅读全文
posted @ 2011-03-16 16:41
Artech
阅读(6983)
推荐(7)
摘要:

继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题。说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题。关于文中涉及的这个问题,我个人觉得是EF一个有待改进的地方,不知道各位看官是否同意?
阅读全文
posted @ 2011-03-13 16:02
Artech
阅读(5258)
推荐(9)
摘要:

本篇文章通过实例的方式,讨论两个在EF使用存储过程的主题:如何通过实体和存储过程的映射实现逻辑删除;对于具有自增长类型主键的数据表,在进行添加操作的时候如何将正确的值反映在实体对象上。
阅读全文
posted @ 2011-03-13 00:13
Artech
阅读(6298)
推荐(8)
摘要:

今天写程序频繁用到两中字符串操作:删除某个字符串指定的前缀和后缀。由于没有现成的方法可用,写了两个扩展方法:TrimPrefix和TrimSuffix。
阅读全文
posted @ 2011-03-07 20:52
Artech
阅读(7088)
推荐(6)
摘要:

在《实现存储过程的自动映射》中,我通过基于T4的代码生成实现了CUD存储过程的自动映射。由于映射的都是基于数据表结构的标准的存储过程,所以它们适合概念模型和存储模型结构相同的场景。如果两种模型存在差异,在进行数据更新操作的时候就会出错。本篇文章主要介绍当概念模型中具有继承关系的两个实体映射到数据库关联的两个表,如何使用存储过程。
阅读全文
posted @ 2011-03-06 22:32
Artech
阅读(6498)
推荐(7)
摘要:

最近一段时间的工作任务是如何将EF引入到我们的开发框架,进行相应的封装、扩展,使之成为一个符合在特定场景下进行企业级快速开发的ORM。在此过程中遇到了一些挑战,也有一些心得。为了向大家分享这些心得,接下来我会写一系列相关的文章。第一个主题是关于在EF中使用存储过程的问题
阅读全文
posted @ 2011-03-05 10:04
Artech
阅读(23233)
推荐(24)
摘要:

《上篇》中我们介绍Kerberos认证的整个流程。在允许的环境下,Kerberos是首选的认证方式。在这之前,Windows主要采用另一种认证协议——NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答消息交换模式完成对请求者的认证。
阅读全文
posted @ 2011-01-25 12:37
Artech
阅读(44975)
推荐(11)
摘要:

最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证、非对称加密、数字证书、数字签名、TLS/SSL、WSS等。如果时间允许,我很乐意写一系列的文章与广大网友分享、交流。对于很多读者来说,今天讨论的可能是一个既熟悉、又陌生的话题——Windows认证。
阅读全文
posted @ 2011-01-24 21:57
Artech
阅读(39412)
推荐(43)
摘要:

IoC的目的就是通过解析注册的依赖注入信息,最终创建出我们希望的某个对象。而只有通过配置的方式来定义IoC容器需要的注入信息,才能实现灵活的设计。所以,如果将两者集成起来,让IoC容器能够解析通过配置定义的“依赖注入”信息,具有很大的现实意义。接下来,我们将通过Unity为例,介绍IoC和自定义进行无缝集成的实现方案。
阅读全文
posted @ 2011-01-20 20:40
Artech
阅读(6645)
推荐(26)
摘要:

昨天在进行Code Review的时候,发现一个关于通过ConfigurationManager的GetSection方法进行配置节读取的问题。虽然这是一个很小的问题,还是它已经存在在项目里面很久了,直到今天才被发现,所以觉得具有一定分享的价值。
阅读全文
posted @ 2011-01-15 15:27
Artech
阅读(9225)
推荐(20)
摘要:

在《上篇》中我们揭示了“缺省参数”的本质,现在我们接着来谈谈C#4.0中另一个重要的新特性:协变(Covariance)与逆变(Contravariance)。对于协变与逆变,大家肯定不会感到陌生,但是我相信有很多人不能很清晰地说出他们之间的区别。我希望通过这篇文章能够让读者更加深刻的认识协变与逆变。但是也不排除另一种可能,那就是读者这篇文章你对这两个概念更加模糊。文章一些内容仅代表个人观点,如有不妥,还望指正。
阅读全文
posted @ 2011-01-13 21:08
Artech
阅读(23475)
推荐(88)