规则组和规则
更新时间:2015 年 6 月 19 日
适用于:Azure
在Microsoft Azure Active Directory 访问控制 (也称为访问控制服务或 ACS) 中,规则组是一组命名的声明规则,用于定义从标识提供者传递到信赖方应用程序的标识声明。 在 ACS 中,规则组与信赖方应用程序相关联。 一个规则组可由多个信赖方应用程序使用,并且一个信赖方应用程序可以引用多个规则组。
当 ACS 从标识提供者接收令牌请求或令牌时,它将通过与信赖方应用程序关联的所有规则组来处理令牌中的声明。 正如所有规则组被同时运行一样,每个规则组中的所有规则也是如此(不论顺序如何)。 如果运行完成后,规则导致一些新的声明需要发出,则与信赖方应用程序相关联的规则组将被再次浏览。 规则和规则组运行进程在运行进程完成后或 ACS 完成 10 个运行 ((以第一个) 为准)后,不会发出任何新声明。
可以使用 ACS 管理门户手动创建和编辑规则组和规则,也可以使用 ACS 管理服务以编程方式创建和编辑规则。
使用 ACS 管理门户配置规则
创建规则组
在 ACS 管理门户中添加和配置新信赖方应用程序的属性时,还可以创建与此信赖方应用程序关联的规则组,因为默认情况下,将在 ACS 管理门户的“添加信赖方应用程序”页中选中“新建规则组”选项。 强烈建议保持此选项的选中状态,从而为新的信赖方应用程序创建默认的规则组 (有关详细信息,请参阅 信赖方应用程序中的“规则组”。) 还可以使用 ACS 管理门户的 “规则组”部分添加规则组 。 这样,当使用“添加信赖方应用程序”页面添加信赖方应用程序时,你就可以将这些应用程序与一个或多个现有规则组关联起来。
生成规则
创建规则组后,可以使用 ACS 管理门户的 “编辑规则组 ”页自动生成规则。 如果决定自动生成规则,则系统会提示你为要生成的规则选择标识提供程序。 当此规则组链接到一个或多个信赖方应用程序时,默认情况下会选择这些信赖方应用程序所用的标识提供程序。
注意
对于 WS 联合身份验证标识提供程序,将为标识提供程序的 WS 联合身份验证元数据中提供的每一种声明类型创建一个规则,并由此规则传递声明类型和声明值。 对于其他标识提供程序,传递规则基于预先确定的一个声明类型列表生成。
查看、添加和编辑规则
ACS 管理门户的 “编辑规则组 ”页显示表中的所有规则,其中列包括规则的 输出声明 、 声明颁发者 (可以是标识提供者或 ACS) ,以及 说明。
如果单击表中给定的某个规则,则会重定向到“编辑声明规则”页面,在该页面中可对规则进行编辑。 若要手动添加新规则,可以单击“添加”。
声明规则
声明规则描述 ACS 如何将输入声明转换为输出声明的逻辑。 规则包含在规则组中,这些规则与信赖方应用程序相关联,每当 ACS 为应用程序颁发令牌时,这些规则将运行。 如果规则组不包含任何规则,则不会将令牌颁发给信赖方应用程序。 通常,对于要颁发给信赖方应用程序的每一种声明类型,均需为其指定一个规则。 可以仅创建和使用一个规则来传递所有声明类型和声明值。 不过,如果针对不同的声明类型使用不同的规则,则可以提高安全性,并可对传递到你的应用程序的数据进行更好的控制。
在 ACS 中,可以将规则配置为将从标识提供者或客户端收到的声明传递到信赖方应用程序,而无需更改声明的类型、颁发者或值。 这些规则称为传递规则。 例如,Windows Live ID (Microsoft 帐户颁发的令牌) 包含 nameidentifier 声明类型。 若要将此声明未更改传递给信赖方应用程序,必须配置一个传递规则,该规则处理来自声明颁发者的输入 nameidentifier 声明类型,Windows Live ID,并创建相同的输出声明。
下表说明了从名为 Contoso.com 的虚构 AD FS 2.0 标识提供程序处传递的声明。
输入声明 | 输出声明 | ||||
---|---|---|---|---|---|
颁发者 |
类型 |
值 |
颁发者 |
类型 |
值 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
访问控制服务 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
john@contoso.com |
访问控制服务 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
john@contoso.com |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
John Doe |
访问控制服务 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
John Doe |
ACS 规则引擎还提供基于声明颁发者、输入声明类型和值将输入声明转换为完全不同的输出声明的功能。 换句话说,ACS 规则引擎允许通过添加、删除或更改令牌包含的声明,将输入令牌转换为不同的输出令牌。 这种形式的声明转换使 ACS 能够基于声明输入值实现基本授权。 下面的示例表明,如果“nameidentifier”输入声明与某个特定值匹配,则将输出类型为“role”、值为“administrator”的声明。
输入声明 | 输出声明 | ||||
---|---|---|---|---|---|
颁发者 |
类型 |
值 |
颁发者 |
类型 |
值 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
访问控制服务 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
主要区域中的 |
ACS 规则引擎还提供基于两个输入声明的结合创建输出声明的功能。 在下面的示例中,如果 Contoso.com 的“nameidentifier”和“role”输入声明都匹配特定的值,则输出声明的类型为“action”、值为“write”。 在一个规则中指定两个输入声明时,这两个值都必须匹配才能生成输出声明。
输入声明 | 输出声明 | ||||
---|---|---|---|---|---|
颁发者 |
类型 |
值 |
颁发者 |
类型 |
值 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
访问控制服务
|
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/action
|
写入
|
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/role |
主要区域中的 |
有关如何使用规则实现令牌转换的详细信息和步骤,请参阅 如何:使用规则实现令牌转换逻辑。
使用 ACS 管理门户添加新或编辑现有声明规则时,必须配置以下设置:
规则条件 (if) - 添加输入声明
如果某条规则要颁发输出声明,则本部分包含的条件都必须为真 (true)。 这些条件包括:
声明颁发者 - 指颁发输入声明的实体。 这可以是配置的标识提供者 (,例如) 或 ACS。 如果输入声明来自服务标识或输入声明来自另一个声明规则,则 ACS 是颁发者。 有关详细信息,请参阅 服务标识。
输入声明类型 - 指从声明颁发者处收到的输入声明类型。 例如,“nameidentifier”的完整声明类型为 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier。 此字段的选项包括:
任意 - 如果从颁发者处收到了任意一种声明类型,则返回 true。
选择类型 - 如果输入声明类型与下拉菜单中选择的类型相匹配,则返回 true。 此菜单填充了对于选中的声明颁发者来说可用的声明类型。
输入类型 - 如果输入声明类型与字段中输入的值精确匹配,则返回 true。
重要
此字段区分大小写。
输入声明值 - 指收到的输入声明值。 例如,声明类型“nameidentifier”将电子邮件地址用作其声明值,则此字段可用来检查特定的电子邮件地址。 此字段的选项包括:
任意 - 如果从颁发者处收到了任意声明值,则返回 true。
输入值 - 如果输入声明类型与字段中输入的值精确匹配,则返回 true。 此选项要求在“输入声明类型”字段中选择或输入特定的输入声明类型。
重要
此字段区分大小写。
规则条件 (if) - 添加第二个输入声明
若要将第二个声明添加到该规则,请单击“添加第二个输入声明”。 这将允许你指定如下所示的附加条件。 请注意,在具有两个输入声明的规则中,必须满足所有条件才能生成输出声明。
声明颁发者 - 指颁发第二个输入声明的实体。 这可以是为第一个声明选择的同一标识提供者,也可以是 ACS。 选择 ACS 以指定在规则处理期间从其他声明规则生成的声明。
重要
不能为第一个声明和第二个声明选择两个不同的标识提供程序,因为规则一次只能处理由一个标识提供程序颁发的一个令牌。
输入声明类型 - 指从声明颁发者处收到的输入声明类型。 例如,“nameidentifier”的完整声明类型为 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier。 此字段的选项包括:
选择类型 - 如果输入声明类型与下拉菜单中选择的类型相匹配,则返回 true。 此菜单填充了对于选中的声明颁发者来说可用的声明类型。
输入类型 - 如果输入声明类型与字段中输入的值精确匹配,则返回 true。
重要
此字段区分大小写。
输入声明值 - 指收到的输入声明值。 例如,声明类型“nameidentifier”将电子邮件地址用作其声明值,则此字段可用来检查特定的电子邮件地址。 如果输入声明类型与字段中输入的准确值匹配,则返回 true。
重要
此字段区分大小写。
规则操作 (then)
如果规则的 If 节中的条件为 true,则本节指定 ACS 颁发的输出声明。 输出声明选项包括以下项:
输出声明类型 - ACS 颁发的声明类型。 此字段的选项包括以下项:
传递输入声明类型 - 颁发一个与输入声明有相同类型的输出声明。
选择类型 - 颁发特定类型的输出声明。 下拉菜单包括公用声明类型列表。
输入类型 - 颁发其类型为输入的类型的声明。 如果输出声明位于 SAML 令牌中,则此值必须是 URI (, https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier 例如) 。
重要
此字段区分大小写。
输出声明值 - 指 ACS 颁发的输出声明的值。 此字段的选项包括以下项:
传递输入声明值 - 颁发一个与输入声明值相同的输出声明。
输入值 - 颁发一个其值为此字段中所输入值的声明。 此选项要求在“输出声明类型”字段中选择或输入特定的输入声明类型。
重要
此字段区分大小写。
规则信息
你可以利用此部分为某规则创建描述。
注意
在 ACS 中,不会为生成的规则自动创建规则说明。
使用 ACS 管理服务配置规则
可以使用 ACS 管理服务以编程方式配置访问控制命名空间中的规则。 有关如何使用 ASP.NET 配置规则的示例,请参阅代码示例:管理服务。 下面是使用 ACS 管理服务配置规则时要考虑的重要事项:
在规则组中编辑和删除规则时,建议先针对该规则组中的所有规则查询 ACS,并使用查询返回的规则 ID 来执行编辑或删除操作。 不建议存储管理服务返回的 ID 以用于将来的操作,因为不保证这些 ID 能够持久保留。
如果你要编写一个自动重试逻辑用于创建规则(例如,在超时的情况下),建议你先查询当前规则组中是否存在相同的规则,然后再次尝试添加规则。