本文档已存档,并且将不进行维护。

规则组和规则

发布时间: 2011年4月

更新时间: 2015年6月

应用到: Azure

在 Microsoft Azure Active Directory 访问控制(也称为访问控制服务或 ACS) 中,规则组是一组命名的声明规则,这些声明规则定义了将哪些标识声明从标识提供程序处传递到信赖方应用程序。在 ACS 中,规则组与信赖方应用程序相关联。一个规则组可由多个信赖方应用程序使用,并且一个信赖方应用程序可以引用多个规则组。

从标识提供程序收到令牌请求或令牌后,ACS 会浏览所有与信赖方应用程序相关联的规则组以处理令牌中的声明。正如所有规则组被同时运行一样,每个规则组中的所有规则也是如此(不论顺序如何)。如果运行完成后,规则导致一些新的声明需要发出,则与信赖方应用程序相关联的规则组将被再次浏览。当完成浏览过程后没有发出新的声明,或 ACS 已完成十次浏览过程(以先达到的条件为准),则规则和规则组浏览过程会停止。

你既可以使用 ACS 管理门户手动创建和编辑规则组和规则,也可以使用 ACS 管理服务通过编程方式来创建和编辑规则组和规则。

在 ACS 管理门户中为某个新的信赖方应用程序添加和配置属性时,你也可以创建一个与此信赖方应用程序相关联的规则组。因为默认情况下,在 ACS 管理门户的“添加信赖方应用程序”页面上,“创建新规则组”选项处于选中状态。强烈建议保持此选项的选中状态,从而为新的信赖方应用程序创建默认的规则组(详细信息,请参阅信赖方应用程序中的“规则组”。)你也可以使用 ACS 管理门户的“规则组”部分来添加规则组。这样,当使用“添加信赖方应用程序”页面添加信赖方应用程序时,你就可以将这些应用程序与一个或多个现有规则组关联起来。

创建一个规则组后,你可以使用 ACS 管理门户中的“编辑规则组”页面来自动生成规则。如果决定自动生成规则,则系统会提示你为要生成的规则选择标识提供程序。当此规则组链接到一个或多个信赖方应用程序时,默认情况下会选择这些信赖方应用程序所用的标识提供程序。

note备注
对于 WS 联合身份验证标识提供程序,将为标识提供程序的 WS 联合身份验证元数据中提供的每一种声明类型创建一个规则,并由此规则传递声明类型和声明值。对于其他标识提供程序,传递规则基于预先确定的一个声明类型列表生成。

ACS 管理门户中的“编辑规则组”页面在一个表中显示所有规则。该表包含三列,分别为:规则的“输出声明”、“声明颁发者”(可以是某个标识提供程序或 ACS)和“描述”。

如果单击表中给定的某个规则,则会重定向到“编辑声明规则”页面,在该页面中可对规则进行编辑。若要手动添加新规则,可以单击“添加”。

“声明规则”描述 ACS 将输入声明转换为输出声明所遵循的逻辑。规则包含在规则组中。规则组与信赖方应用程序相关联,并在 ACS 为应用程序颁发令牌时将浏览规则组。如果规则组不包含任何规则,则不会将令牌颁发给信赖方应用程序。通常,对于要颁发给信赖方应用程序的每一种声明类型,均需为其指定一个规则。可以仅创建和使用一个规则来传递所有声明类型和声明值。不过,如果针对不同的声明类型使用不同的规则,则可以提高安全性,并可对传递到你的应用程序的数据进行更好的控制。

在 ACS 中,你可以配置一个规则以将从标识提供程序或客户端处收到的声明传递到信赖方应用程序,而不更改声明的类型、颁发者或值。这些规则称为传递规则。例如,由 Windows Live ID(Microsoft 帐户) 颁发的令牌包含 nameidentifier 声明类型。若要在不改变此声明的情况下将其传递给信赖方应用程序,则你必须为此配置一种传递规则:该规则将处理来自声明颁发者 Windows Live ID 的输入声明类型 nameidentifier,并创建一个相同的输出声明。

下表说明了从名为 Contoso.com 的虚构 AD FS 2.0 标识提供程序处传递的声明。

 

输入声明 输出声明

Issuer

类型

Issuer

类型

Contoso.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

123456789

访问控制服务

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

123456789

Contoso.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

john@contoso.com

访问控制服务

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

john@contoso.com

Contoso.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

John Doe

访问控制服务

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

John Doe

利用 ACS 规则引擎,你还可以根据声明颁发者、输入声明类型和声明值,将输入声明转换为截然不同的输出声明。换句话说,ACS 规则引擎允许你通过添加、删除或更改令牌中包含的声明,将输入令牌转换为不同的输出令牌。此种形式的声明转换使 ACS 能够根据声明输入值进行基本的授权。下面的示例表明,如果“nameidentifier”输入声明与某个特定值匹配,则将输出类型为“role”、值为“administrator”的声明。

 

输入声明 输出声明

Issuer

类型

Issuer

类型

Contoso.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

123456789

访问控制服务

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

管理员

ACS 规则引擎还能够结合两个输入声明创建输出声明。在下面的示例中,如果 Contoso.com 的“nameidentifier”和“role”输入声明都匹配特定的值,则输出声明的类型为“action”、值为“write”。在一个规则中指定两个输入声明时,这两个值都必须匹配才能生成输出声明。

 

输入声明 输出声明

Issuer

类型

Issuer

类型

Contoso.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

123456789

访问控制服务

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/action

write

Contoso.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role

管理员

有关如何使用规则实现令牌转换的详细信息和步骤,请参阅操作方法:使用规则实现令牌转换逻辑

当使用 ACS 管理门户来添加新的声明规则或编辑现有规则时,你必须对下列设置进行配置:

如果某条规则要颁发输出声明,则本部分包含的条件都必须为真 (true)。这些条件包括:

  • 声明颁发者 - 指颁发输入声明的实体。此项可以为已配置的标识提供程序(如 )或 ACS。如果输入声明来自服务标识或其他声明规则,则其颁发者为 ACS。有关详细信息,请参阅服务标识

  • 输入声明类型 - 指从声明颁发者处收到的输入声明类型。例如,“nameidentifier”的完整声明类型为 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier。此字段的选项包括:

    • 任意 - 如果从颁发者处收到了任意一种声明类型,则返回 true。

    • 选择类型 - 如果输入声明类型与下拉菜单中选择的类型相匹配,则返回 true。此菜单填充了对于选中的声明颁发者来说可用的声明类型。

    • 输入类型 - 如果输入声明类型与字段中输入的值精确匹配,则返回 true。

      Important重要提示
      此字段区分大小写。

  • 输入声明值 - 指收到的输入声明值。例如,声明类型“nameidentifier”将电子邮件地址用作其声明值,则此字段可用来检查特定的电子邮件地址。此字段的选项包括:

    • 任意 - 如果从颁发者处收到了任意声明值,则返回 true。

    • 输入值 - 如果输入声明类型与字段中输入的值精确匹配,则返回 true。此选项要求在“输入声明类型”字段中选择或输入特定的输入声明类型。

      Important重要提示
      此字段区分大小写。

若要将第二个声明添加到该规则,请单击“添加第二个输入声明”。这将允许你指定如下所示的附加条件。请注意,在具有两个输入声明的规则中,必须满足所有条件才能生成输出声明。

  • 声明颁发者 - 指颁发第二个输入声明的实体。它可以是为第一个声明选择的同一标识提供程序,也可以是 ACS。选择 ACS 可指定在规则处理期间从其他声明规则生成的声明。

    Important重要提示
    不能为第一个声明和第二个声明选择两个不同的标识提供程序,因为规则一次只能处理由一个标识提供程序颁发的一个令牌。

  • 输入声明类型 - 指从声明颁发者处收到的输入声明类型。例如,“nameidentifier”的完整声明类型为 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier。此字段的选项包括:

    • 选择类型 - 如果输入声明类型与下拉菜单中选择的类型相匹配,则返回 true。此菜单填充了对于选中的声明颁发者来说可用的声明类型。

    • 输入类型 - 如果输入声明类型与字段中输入的值精确匹配,则返回 true。

      Important重要提示
      此字段区分大小写。

  • 输入声明值 - 指收到的输入声明值。例如,声明类型“nameidentifier”将电子邮件地址用作其声明值,则此字段可用来检查特定的电子邮件地址。如果输入声明类型与字段中输入的准确值匹配,则返回 true。

    Important重要提示
    此字段区分大小写。

此部分指定当规则的 If 部分中的条件为真时,由 ACS 颁发的输出声明。输出声明选项包括以下项:

  • 输出声明类型 - 指由 ACS 颁发的声明类型。此字段的选项包括以下项:

    • 传递输入声明类型 - 颁发一个与输入声明有相同类型的输出声明。

    • 选择类型 - 颁发特定类型的输出声明。下拉菜单包括公用声明类型列表。

    • 输入类型 - 颁发其类型为输入的类型的声明。如果输出声明将出现在 SAML 令牌中,则此值必须为 URI(例如,http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier)。

      Important重要提示
      此字段区分大小写。

  • 输出声明值 - 指由 ACS 颁发的输出声明的值。此字段的选项包括以下项:

    • 传递输入声明值 - 颁发一个与输入声明值相同的输出声明。

    • 输入值 - 颁发一个其值为此字段中所输入值的声明。此选项要求在“输出声明类型”字段中选择或输入特定的输入声明类型。

      Important重要提示
      此字段区分大小写。

你可以利用此部分为某规则创建描述。

note备注
在 ACS 中,不会为生成的规则自动创建规则描述。

可以使用 ACS 管理服务以编程方式配置 “访问控制”命名空间中的规则。有关如何使用 ASP.NET 配置规则的示例,请参阅代码示例:管理服务。在使用 ACS 管理服务配置规则时,请注意以下重要事项:

  • 在编辑和删除规则组中的规则时,建议你先查询 ACS 以获取该规则组中的所有规则,然后使用查询返回的规则 ID 执行编辑或删除操作。不建议存储管理服务返回的 ID 以用于将来的操作,因为不保证这些 ID 能够持久保留。

  • 如果你要编写一个自动重试逻辑用于创建规则(例如,在超时的情况下),建议你先查询当前规则组中是否存在相同的规则,然后再次尝试添加规则。

另请参阅

显示: