何时使用传递或筛选声明规则

如果您需要采用特定的传入声明类型,然后应用一个动作来基于传入声明中的值确定应产生什么输出,您可以在 Active Directory 联合身份验证服务(AD FS)中使用此规则。 使用此规则时,会根据规则中配置的选项之一传递或筛选与下表中的规则逻辑匹配的任何声明。

规则选项 规则逻辑
传递所有声明值 如果传入声明类型等于 指定的声明类型和 值等于 任何值,则传递声明
仅传递特定的声明值 如果传入声明类型等于 指定的声明类型和 值等于 指定的声明值,则传递声明
仅传递与特定的电子邮件后缀值匹配的声明值 如果传入的声明类型等于指定的声明类型并且值等于指定的后缀值,则传递该声明。
仅传递以特定值开头的声明值 如果传入声明类型等于指定的声明类型,且值以指定的声明值开头,则传递声明。

以下部分提供了声明规则的基本简介,并提供有关何时使用此规则的更多详细信息。

关于声明规则

声明规则表示使用传入声明、向其应用条件 (if x, then y) 并基于条件参数生成传出声明的业务逻辑的实例。 下面的列表概述了在进一步阅读本主题中的内容之前应了解的有关声明规则的重要提示:

  • 在“AD FS 管理”管理单元中,只能使用声明规则模板创建声明规则

  • 声明规则处理以下两种传入声明:直接来自声明提供程序(如 Active Directory 或另一个联合身份验证服务),或来自声明提供程序信任上的接受转换规则的输出。

  • 声明规则由声明颁发引擎按给定规则集内的时间顺序处理。 通过为规则设置优先级,可以进一步优化或筛选由给定规则集内以前的规则生成的声明。

  • 声明规则模板始终要求你指定传入声明类型。 但是,你可以使用单个规则处理声明类型相同的多个声明值。

有关声明规则和声明规则集的更多详细信息,请参阅 声明规则的角色。 有关如何处理规则的详细信息,请参阅 声明引擎的角色。 有关如何处理声明规则集的详细信息,请参阅 声明管道的角色

传递所有声明值

进行此操作时,指定声明类型的所有传入声明值将作为传出声明值传递。 例如,在传入声明类型被指定为角色声明类型时,所有传入声明值将逐一复制到具有角色声明类型的新传出声明中。

筛选声明

在 AD FS 中,术语 声明筛选 意味着筛选或限制传入声明值,以便仅传递或发送某些值作为传出声明。 使此功能成为可能的是传递或筛选传入声明规则模板。 在此规则的属性中,可以设置条件以筛选传入值,以便仅传递满足指定条件的值。

例如,可以使用此规则仅在传入声明类型与角色声明类型匹配时,传递那些其声明值与采购者匹配的声明。或者,你可能只想发出有关用户姓名的声明,而不希望发出包含用户社会安全号的声明。

使用此规则的筛选器条件时,将检查所有传入声明,以确定哪些声明与规则设置的条件匹配。 将忽略所有其他声明,以便仅传递与所选声明类型匹配的指定声明值。

例如,如下图所示,当规则设置为筛选条件,只筛选与 UPN 声明类型相关联并且以 @fabrikam.com 结尾的传入声明时,所有其他传入声明都会被忽略,除非它们满足此条件。 这包括声明类型为“电子邮件地址”的传入声明,即使其声明值以 @fabrikam.com 结尾也是如此。 在这种情况下,只有包含该值的 Nick@fabrikam.com 声明才会发送到信赖方。

何时使用透传

对声明提供程序信任配置此规则

使用声明提供程序信任时,您可以将此规则配置为仅传递来自声明提供程序并符合特定约束的传入声明。 例如,你可能只想接受来自声明提供程序的电子邮件声明;因此,你将使用此规则模板接受以声明提供程序的域名系统(DNS)名称结尾的电子邮件声明类型。

对信赖方信任配置此规则

使用信赖方信任时,可以将此规则配置为传递或筛选将发送给信赖方的传出声明。 某些信赖方可能不了解某些声明类型,或者某些声明可能包含不应发送给某些信赖方的敏感信息。 此规则模板可帮助为特定的信赖方信任强制实施这些策略。

如何创建此规则

可使用声明规则语言或“AD FS 管理”管理单元中的“传递或筛选传入声明”规则模板来创建此规则。 此规则模板提供以下配置选项:

  • 指定声明规则名称

  • 指定传入声明类型

  • 传递所有声明值

  • 仅传递特定的声明值

  • 仅传递与特定的电子邮件后缀值匹配的声明值

  • 仅传递以特定值开头的声明值

有关如何创建此模板的更多说明,请参阅 AD FS 部署指南中的 “创建规则以传递或筛选传入声明 ”。

使用声明规则语言

如果仅当声明值与自定义模式匹配时才应发送声明,则必须使用自定义规则。 有关详细信息,请参阅“何时使用自定义规则”。

有关如何构造传递或筛选规则语法的示例

简单的筛选规则将基于上述属性之一筛选声明。 例如,以下规则将传递所有电子邮件声明:

c:[type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]  => issue(claim  = c);

筛选器可以从逻辑上相加。 例如,以下规则将接受具有值 johndoe@fabrikam.com的所有电子邮件声明:

c:[type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", value == "johndoe@fabrikam.com "]  => issue(claim  = c);

在上面的示例中,筛选器始终使用相等运算符。 声明规则语言支持以下运算符:

  • == — 等于(区分大小写)

  • != — 不等于(区分大小写)

  • =~ — 正则表达式匹配

  • !~ — 正则表达式不匹配

例如,以下规则将接受本地联合服务器未发出的所有电子邮件声明,其后缀为 boeing.com:

c:[type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", value =~ "^.*@boeing\.com$" , issuer != "LOCAL AUTHORITY"]  => issue(claim  = c);

创建自定义规则的最佳做法

筛选器可以应用于每个声明的一个或多个属性,如下表所述。

声明属性 DESCRIPTION
类型 声明类型(通常表示为 URI)反映了在一个联合会中合作伙伴之间关于声明中所传达信息类型的隐式协议。 例如,类型的 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress 声明将包含用户的电子邮件地址。
价值 索赔的价值。 例如,类型的 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress 声明的值可能为 johndoe@fabrikam.com
ValueType ValueType 表示如何解释声明的 Value 中包含的信息。 通常,ValueType 将设置为 http://www.w3.org/2001/XMLSchema#string,但声明值可能包含 Base64Binary 编码的数据(例如图像)或日期、布尔值等。
发行人 发出方表示上一次发出有关用户的声明的参与方。 如果在声明提供程序联合服务器上获取声明,则所有声明的颁发者将设置为“本地机关”。 如果声明由联合提供程序联合服务器接收,则声明的发出方将设置为已对令牌签名的声明提供程序的声明提供程序标识符。 因此,当处理从声明提供程序收到的声明上的规则时,所有声明的发出方都将设置为相同的值。 为信赖方创作规则时,可使用 issuer 属性来区分来自不同声明提供程序的声明。
原始发行者 此声明属性旨在传达最初颁发声明的联合服务器。 由于声明的颁发者属性设置为对令牌进行签名的最后一个联合服务器,因此原始颁发者在声明流经多个联合服务器的情况下非常有用(例如,从联合提供程序联合服务器接收令牌的信赖方可能对特定声明提供程序联合服务器对用户进行身份验证感兴趣)
性能 除上述五种属性外,每个声明还有一个可以存储命名属性的属性包。 这些属性在令牌中不会序列化,只能用于在单台联合服务器范围内的声明发出管道的组件之间传递信息。 例如,在处理声明提供程序规则时设置一个属性,然后在依赖方规则中引用该属性。