SharePoint 中基于声明的标识和概念
基于声明的标识模型
当您构建声明感知应用程序时,用户会以一组声明的形式向您的应用程序提供标识。 其中一个声明可能是用户名,另一个可能是电子邮件地址。 此处的概念是外部标识系统将配置为向您的应用程序提供它所需的有关提出每个请求的用户的信息,以及保证应用程序收到的标识数据来自可信源的加密保证。
在此模型中,单一登录更易于实现,并且您的应用程序不再负责处理以下事项:
对用户进行身份验证
存储用户帐户和密码
调用企业目录以查找用户身份详细信息
与来自其他平台或公司的标识系统集成
在该模型下,您的应用程序基于用户提供的声明做出与标识相关的决定。 这可以是各方面的决定 从使用用户名字的简单应用程序个性化,到授权用户访问应用程序中更高价值的功能和资源。
下面的几节将介绍一些术语和概念,以帮助您了解基于声明的标识体系结构。
标识:描述实体的特性集
标识是一组用于描述系统中要确保其安全的用户或其他一些实体的特性。
声明:一条标识信息
将声明视为一段标识信息, (例如销售角色) 中的姓名、电子邮件地址、年龄或成员身份。 应用程序收到的声明越多,对用户的了解就越多。 这些称为“声明”,而不是“属性”,因为传递方法在描述企业目录时经常使用。 在此模型中,应用程序不会在目录中查找用户属性。 相反,用户向应用程序传递声明,而应用程序会对其进行检查。 每个声明都由颁发者提出,你只信任该声明,就像信任颁发者一样多。 例如,你更信任公司域控制器发出的声明,而不是你信任用户所做的声明。
安全令牌:声明的序列化集
用户会将一组声明随请求一同发送给您的应用程序。 在 Web 服务中,这些声明是在 SOAP 信封的安全标头中传送的。 在基于浏览器的 Web 应用程序中,声明通过用户浏览器中的 HTTP POST 进行传送,如果需要会话,则稍后可能在 Cookie 中对其进行缓存。 无论如何传送声明,都必须对其进行序列化。 安全令牌是由颁发机构进行数字签名的一组序列化声明。 签名很重要:它向您保证用户不仅做出了声明,还会将声明发送给您。 在无需加密的低安全性环境中,可以使用未签名的令牌,但本章节对此不做介绍。
Windows Identity Foundation (WIF) 中的核心功能之一是创建和读取安全令牌。 WIF 和 Microsoft .NET Framework 负责处理所有加密工作,并向您的应用程序提供一组它可以读取的声明。
安全令牌服务 (STS)
安全令牌服务 (STS) 是一个根据本章"标准"一节中讨论的互操作协议来生成、签署和颁发安全令牌的服务组件。 实施这些协议需要进行大量的工作,但 WIF 能为您完成所有这些工作,让那些不精通协议的人不费吹灰之力便可启动并运行 STS。
使用 WIF 可更加轻松地生成自己的 STS。 由您决定如何实现强制实施 STS 的逻辑或规则(通常称为安全策略)。
颁发机构
从颁发 Kerberos 票证的域控制器到颁发 X.509 证书的证书颁发机构,颁发机构有许多不同类型。 本章讨论的特定类型的颁发机构可颁发包含声明的安全令牌。 此颁发机构是负责颁发安全令牌的 Web 应用程序或 Web 服务。 如果指定目标信赖方和发出请求的用户,则该颁发机构必须能够颁发正确声明,还可能要负责与用户存储进行交互,以查找声明并对用户进行身份验证。
无论您选择哪个颁发机构,它都会在您的标识解决方案中扮演重要角色。 当您通过信赖声明从应用程序中分离出身份验证功能时,实际上是将责任转给该颁发机构,由它代表您对用户进行身份验证。
信赖方
构建依赖声明的应用程序时,将构建信赖方应用程序。 信赖方的同义词包括"声明感知应用程序"和"基于声明的应用程序"。 Web 应用程序和 Web 服务都可以成为信赖方。
信赖方应用程序使用 STS 颁发的令牌并从令牌中提取声明,以将其用于与标识相关的任务。 STS 支持两种类型的信赖方应用程序:ASP.NET Web 应用程序和 Windows Communication Foundation (WCF) Web 服务。
标准
为使所有任务都具有互操作性,在前面的方案中使用了多个 WS-* 标准。 可使用 WS-MetadataExchange 检索策略,并根据 WS-Policy 规范确定策略自身的结构。 STS 会公开用于实现 WS-Trust 规范的端点,该规范描述如何请求和接收安全令牌。 目前,大多数安全令牌服务都会颁发用安全声明标记语言 (SAML) 设置了格式的令牌。 SAML 是业内认可的 XML 词汇表,可用来以互操作方式表示声明。 在多平台环境下,这使您能够在完全不同的平台上与 STS 进行通信,并能够在不考虑平台的情况下在所有应用程序中实现单一登录。
基于浏览器的应用程序
并非只有智能客户端才能使用基于声明的标识模型。 基于浏览器的应用程序(也称为被动客户端)也可以使用该模型。 以下情况描述了其工作原理。
首先,用户使浏览器指向声明感知 Web 应用程序(信赖方应用程序)。 该 Web 应用程序将浏览器重定向到 STS,以便对用户进行身份验证。 STS 托管在一个简单的 Web 应用程序中,该应用程序会读取传入请求、使用标准 HTTP 机制对用户进行身份验证,然后创建一个 SAML 令牌并用一段 ECMAScript (JavaScript, JScript) 代码作为答复,该代码将使浏览器启动一个可将 SAML 令牌发送回信赖方的 HTTP POST。 此 POST 的正文包含信赖方请求的声明。 此时,信赖方通常会将声明打包到 Cookie 中,因此不必为每个请求重定向用户。
声明为 Windows 令牌服务 (c2WTS)
声明为 Windows 令牌服务 (c2WTS) 是 Windows Identity Foundation (WIF) 的一项功能。 c2WTS 从非 Windows 安全令牌(如 SAML 和 X.509 令牌)中提取用户主体名称 (UPN) 并生成模拟级别的 Windows 安全令牌。 这使得信赖方应用程序可以模拟用户。 在访问位于运行信赖方应用程序的计算机外部的后端资源(如 Microsoft SQL Server)时,可能需要此功能。
c2WTS 是作为 WIF 的一部分安装的 Windows 服务。 出于安全原因,仅当用户选择使用 c2WTS 时,它才会工作。 必须手动启动该服务并将其作为本地系统帐户运行。 管理员还必须用允许调用方的列表手动配置 c2WTS。 默认情况下,该列表为空。
如果信赖方应用程序作为本机系统账户运行,则它不需要使用 c2WTS。 但是如果信赖方应用程序作为网络服务账户运行,或者它是 ASP.NET 应用程序,则它可能需要使用 c2WTS 来访问其他计算机上的资源。
假设你有一个 Web 场,其中包含一个运行 ASP.NET 应用程序的服务器,该应用程序访问后端服务器上的 SQL 数据库。 你希望使此应用程序声明感知。 但是,应用程序无法使用从 STS 接收的声明来访问 SQL 数据库。 相反,它使用 c2WTS 将 UPN 声明转换为 Windows 安全令牌。 这允许它访问 SQL 数据库。
注意
若要允许应用程序访问不同服务器上的资源,域管理员必须配置 Active Directory 目录服务以启用约束委派。 有关如何启用约束委派的信息,请参阅 如何:在 ASP.NET 2.0 中使用协议转换和约束委派。