声明是为了用于在应用程序中进行授权而做出的与用户有关的陈述(例如名称、标识、密钥、组、权限或功能),并且能够为 Active Directory 联合身份验证服务 (AD FS) 联合身份验证中的伙伴双方所接受。

AD FS 联合身份验证服务中介程序在许多不同实体之间相互信任。用于使包含任意值的声明可以进行受信任的交换。然后接收方(例如,资源伙伴)会使用这些声明来做出授权决定。

声明可以通过以下三种方式经过联合身份验证服务:

  • 从帐户存储到帐户联合身份验证服务,再到资源伙伴

  • 从帐户伙伴到资源联合身份验证服务,再到资源应用程序

  • 从帐户存储到联合身份验证服务,再到资源应用程序

联合身份验证服务可以配置为充当所有三个角色。因此,一个联合身份验证服务可以促进所有三个通信流。

联合身份验证服务支持三种类型的声明:标识声明、组声明和自定义声明。下表更详细地说明每种声明类型。

声明类型 描述

标识

AD FS 中的 UPN、电子邮件和公用名为标识声明类型:

  • UPN:指示 Kerberos 样式的用户主体名称 (UPN),例如 user@realm。只有一个声明可以是 UPN 类型。即使必须传递多个 UPN 值,也只有一个声明可以是 UPN 类型。其他 UPN 可以配置为自定义声明类型。

  • 电子邮件:指示 user@domain 形式的征求意见文档 (RFC) 2822 样式电子邮件名称。只有一个声明可以是电子邮件类型。即使必须传递多个电子邮件值,也只有一个声明可以是电子邮件类型。其他电子邮件可以配置为自定义声明类型。

  • 公用名:指示用于个性化的任意字符串。例如 John Smith 或 Tailspin Toys Employee。只有一个声明可以是公用名类型。一定要注意,没有任何机制来保证公用名声明的唯一性。因此,使用此声明类型做出授权决定时应小心。

指示组或角色中的成员身份。管理员定义各个组类型为“组声明”的声明。例如,可能定义以下组的声明集:[Developer, Tester, Program Manager]。每个组声明是管理声明填充和映射的独立单元。可以将组声明的值视为指示成员身份的布尔值。

自定义

指示包含有关用户的自定义信息(例如员工 ID 号)的声明。

如果令牌中存在三个标识声明类型中的多个类型,将按照下列顺序确定标识声明的优先级:

  1. UPN

  2. 电子邮件

  3. 公用名

要颁发令牌,必须至少存在上述标识声明类型中的一种。

声明映射

AD FS 使用 WS 联合身份验证被动请求者协议 (WS-F PRP),该协议在联合身份验证服务颁发的安全令牌中携带声明。这些声明最初是从帐户存储 [Active Directory 域服务 (AD DS) 帐户存储或 Active Directory 轻型目录服务 (AD LDS) 帐户存储] 填充的。

联合身份验证服务可以在这些声明传出到联合身份验证伙伴或从联合身份验证伙伴传入时进行映射。声明映射是映射、删除或筛选操作,或者是将传入声明变成传出声明的操作。每个联合身份验证伙伴的声明映射可能会有所不同。定义这些声明的填充和映射对于联合身份验证的配置至关重要。声明映射使用区分大小写的字符串比较。下图说明声明映射的过程。

声明映射过程

组织声明集

所有传入声明均映射到组织声明。组织声明是组织命名空间中,中间形式或标准化形式的声明。所有内部联合身份验证服务操作均对组织声明集执行。组织声明由资源应用程序使用。

使用组织声明,不必在任何需要进行通信的两个组织之间分别管理映射。每个组织定义一个指向组织声明或来自组织声明的映射。这样可以降低管理 AD FS 的复杂程度。例如,如果联合身份验证包含

x 个帐户伙伴

y 个资源应用程序

则联合身份验证包含 x + y 个声明映射。

这样就减少了潜在的 x × y 声明映射数。举个具体的示例,如果联合身份验证服务包含:

3 个帐户伙伴

7 个资源应用程序

联合身份验证只需要 10 个声明映射,而如果直接从传入声明映射到传出声明,则可能需要 21 个声明映射。

电子邮件

电子邮件声明类型始终映射到电子邮件声明类型。作为此映射的一部分,在帐户联合身份验证服务上,域后缀可能映射到一个常值。将域后缀映射到某个常数值可防止伙伴组织无意中向另一个组织提供关于他们的内部林结构的信息。在资源联合身份验证服务中,可能会根据常值列表筛选域后缀。

以下示例说明两个组织 Tailspin Toys 和 Adventure Works 之间的 AD FS 联合身份验证。在此示例中,Tailspin Toys 是帐户伙伴,Adventure Works 是资源伙伴。

  • 充当帐户联合身份验证服务的 Tailspin Toys 将电子邮件组织声明映射到 Adventure Works 的传出电子邮件声明。作为该映射的一部分,将所有电子邮件后缀映射到 tailspintoys.com。如果组织电子邮件声明为 (e-mail=jsmith@sales.tailspintoys.com),传出电子邮件声明则为 (e-mail=jsmith@tailspintoys.com)。

  • 充当资源联合身份验证服务的 Adventure Works 将传入 Tailspin Toys 电子邮件声明映射到电子邮件组织声明,作为该映射的一部分,将根据 tailspintoys.com 筛选后缀列表。因此,接受传入 Tailspin Toys 电子邮件声明 (e-mail=jsmith@tailspintoys.com),但是拒绝传入 Tailspin Toys 电子邮件声明 (e-mail=jsmith@adventure-works.com)。

UPN

UPN 声明类型始终映射到 UPN 声明类型。与电子邮件声明相同,UPN 声明类型也受后缀映射和筛选的影响。但是,因为 AD DS 允许不带 @ 符号的 UPN,所以,如果定义了 UPN 后缀映射,帐户联合身份验证服务会附加 @ 符号,后跟后缀。否则,如果通过任何后缀,联合身份验证服务会原样传递不带 @ 符号的 UPN。在资源端,如果允许任何 UPN 后缀,将接受不带 @ 符号的 UPN。否则,如果允许特定的 UPN 后缀,将拒绝不带 @ 符号的 UPN。

公用名

公用名声明类型始终映射到公用名声明类型。公用名声明类型不受任何其他规则的影响。

自定义

自定义声明类型始终映射到其他自定义声明类型。例如,如果传入声明集为 (UPN, Custom=[EmployeeNumber, TaxPayerID]),组织声明集为 (UPN, Custom=[Employee, SSN]),可以创建从 EmployeeNumber 到 Employee 的映射和从 TaxPayerID 到 SSN 的映射。

组声明类型始终映射到其他组声明类型。例如,如果传入声明集为 (UPN, Group=[One, Two, Three]),组织声明集为 (UPN, Group=[X,Y,Z]),可以创建从 One 到 Y 的映射、从 Two 到 X 的映射和从 Three 到 Z 的映射。

组到 UPN 的映射

除了上面各个部分说明的标准映射之外,还可以使用特殊的组到 UPN 的声明映射。如果声明从帐户伙伴传入,只有资源联合身份验证服务支持组到 UPN 的声明映射。在这种情况下,UPN 声明类型不会映射到 UPN 声明类型。而是提供组到 UPN 的声明映射的排序列表。

例如,组到 UPN 的列表可能为:

  1. Dev 到 developers@internal.tailspintoys.com

  2. Test 到 testers@internal.tailspintoys.com

  3. PM 到 progmgrs@internal.tailspintoys.com

如果传入声明集为 (Common name=John Smith, Group=[Dev]),组织声明集将包含 (Common name=John Smith, UPN=developers@internal.tailspintoys.com)。记住,该列表已排序。因此,声明集 (Common name=John Smith, Group=[Dev,PM]) 将生成 (Common name=John Smith, UPN=developers@internal.tailspintoys.com)。此外,如果传入声明包含 UPN,将覆盖该 UPN。此特殊映射规则专门支持访问旧式资源的基于组的资源帐户。组到 UPN 的映射的顺序在联合身份验证服务的信任策略中指定。

审核声明

某些组声明和自定义声明可能指定为可审核。如果启用了审核,审核允许在安全事件日志中公开声明名,但是省略声明的值。Social Security Number 就属于可审核声明的示例。将公开声明名“Social Security Number”,但是不公开该声明中存储的实际数值。在生成或映射声明时不审核该声明值。

注意

标识声明类型始终可审核。

请参阅


目录