本文基于“Geneva”框架的预发布版本撰写而成。所有信息均有可能发生变更。
本文使用以下技术:
Windows Communication Foundation
“Geneva”框架(以前称为“Zermatt”)是用于构建基于声明的应用程序和服务以及实现联合安全方案的新框架代号。它的功能包括用于构建自定义安全令牌服务 (STS) 的探测功能、要求从 ASP.NET 应用程序进行联合身份验证的机制,以及简化 ASP.NET 应用程序和 Windows Communication Foundation (WCF) 服务的基于声明的授权的对象模型。
Geneva 框架还包括支持 Windows CardSpace 的功能(如托管信息卡颁发)和用于简化 Windows CardSpace 登录体验创建过程的 ASP.NET 控件。(有关 Windows CardSpace 的详细信息,请阅读“身份标识:使用 Windows CardSpace 保证您的 ASP.NET 应用程序和 WCF 服务的安全”。)显然,Geneva 框架包含多种安全功能,但其核心功能是基于声明的安全性。
虽然 WCF 一直以来都提供了对基于声明的安全模型的本机支持,但是 Geneva 框架简化了运行时对声明的访问过程并提供支持基于声明的授权的机制,使授权主体与已在 Microsoft .NET Framework 中提供的基于角色的授权主体一致,进而改善了此体验。ASP.NET 应用程序利用 Geneva 框架获得基于声明的授权功能,该框架与增强基于角色的安全性的现有 ASP.NET 登录控件兼容。在本文中,我将着重介绍实现基于声明的安全模型的价值、描述如何使用 Geneva 框架获得基于声明的 WCF 服务,并将此方法与 WCF 在不使用 Geneva 框架的情况下处理基于声明的安全性的方法进行比较。
在继续阅读本文之前,我建议您阅读一下由 Keith Brown 和 Sesha Mani 合著的针对开发人员的 Geneva 框架白皮书。该白皮书概述了 Geneva 框架的功能以及有关基于声明的安全性概念的一些背景,并介绍了如何在 ASP.NET 应用程序和 WCF 服务中启用这些功能(但以前者为重点)。此外,您还可以在 Keith Brown 于 2007 年 9 月发布的“安全简报”专栏中了解有关 WCF 和基于声明的安全性的详细信息。
为什么要使用基于声明的安全性?
您为什么希望移至基于声明的安全模型?在考虑使用 Geneva 框架实现解决方案之前,您必须知道此问题的答案。假定应用程序角色的定义从未发生过更改,并且只有一个身份验证机制会将安全主体映射到这些角色,则基于角色的安全性就已经足够了。但基于声明的安全模型有助于应用程序和服务的设计,以便它们不会绑定到特定凭据类型或特定角色组。这是基于声明的安全模型的价值主张之一。
从角色中分离应用程序和服务允许对角色名称和意义进行更改,而不会影响系统。可以为经过身份验证的用户分配适用于授权的更精细的项目 — 声明。声明可以根据经过身份验证的用户进行分配,如图 1 所示,也可以根据经过身份验证的用户的角色进行分配,如图 2 所示。
图 1 根据经过身份验证的用户分配声明