声明性 WCF安全性2010-12-24 MSDN Juval Lowy目录安全方案Intranet 应用程序Internet 应用程序企业对企业应用程序匿名应用程序无安全性声明性安全框架实现 SecurityBehaviorAttribute客户端声明性安全SecurityHelper 和 SecureClientBase<T>这一切意味着什么安全性到目前为止是 Windows® Communication Foundation (WCF) 最复 杂的领域。在服务端的每次 WCF 操作调用中,安全都由服务契约、操作契约、 错误契约(如果存在)、服务行为、操作行为、宿主配置和方法配置及其代码等 控制。其中的每一项都可以具有十二个或更多个与安全相关的属性,如图 1 所 示,该图描述了 ServiceHostBase(ServiceHost 的基础)的多个安全属性。

图 1ServiceHostBase 的安全性相关属性不仅有多得吓人的详细信息要掌握,同时在各个部件之间还存在复杂的关系 ,由此产生了大量可能的排列组合。更加复杂的问题是,并不是所有组合都是允 许或受支持的,所有允许的组合亦不全都是合理或有意义的。毫不奇怪,编程模型非常复杂就强烈意味着在应用程序级别和业务级别容易 出现问题。允许跨供应商、信任、平台和技术边界进行安全通信这个目标的底层 复杂性导致了上述结果。任何延伸都不是一项简单的任务。但是,与 WCF 的其 他方面(如事务、同步和实例化)不同,安全性没有用于进行配置的属性或一站 式方法。开发人员仅可以控制现成的原始安全模型。有很好的理由不将高级安全编程模型包括在内:任何此类模型都不可能解决 所有应用程序和方案,但是遗漏任何应用程序也是不明智的,因为安全在所有方 案中都非常重要。意识到不可能拿出一个为所有应用程序优化的统一的高级安全模型后,我问 了自己这样一个问题:有没有一种模型对大多数应用程序都足够适用?虽然可解 决所有方案的全面框架不可能实现,但我希望创建一种解决方案,可轻松为绝大 多数情况配置安全设置。在此专栏文章中,我展示了自己的声明性安全框架。对于服务,我提供了一种安全属性;对于客户端,我提供了一些帮助器类和 安全代理类。我的声明性框架使安全配置与 WCF 配置的其他方面相同。我想要 一种声明性模型,该模型可单独使用并可将了解安全详情的需要降到最低。作为 一名开发人员,您只需要选择正确的方案,我的框架会让配置自动进行。此外, 我的框架要求正确的选项并执行最佳实践。同时,我希望该模型可提供粒度和对 底层配置的控制(如果需要此类控制)。在本文中,我将着重讲述目标方案、我的框架如何实现以及如何使用该框架 。我也会展示一些说明 WCF 可扩展性的有趣的 WCF 编程技术(您可以从 MSDN® 杂志网站上下载该安全框架)。