何时使用传递或筛选声明规则
如果需要使用特定的传入声明类型,则可以在 Active Directory 联合身份验证服务 (AD FS) 中使用此规则,然后应用一项操作,用于根据传入声明中的值确定应出现的输出。 使用此规则时,将根据你在此规则中配置的任一选项传递或筛选与下表中的规则逻辑匹配的任何声明。
规则选项 | 规则逻辑 |
---|---|
传递所有声明值 | 如果传入声明类型等于指定的声明类型 并且值等于任意值,则传递该声明 |
仅传递特定的声明值 | 如果传入声明类型等于指定的声明类型 并且值等于指定的声明值,则传递该声明 |
仅传递与特定的电子邮件后缀值匹配的声明值 | 如果传入声明类型等于指定的声明类型 并且值等于指定的后缀值,则传递该声明 |
仅传递以特定值开头的声明值 | 如果传入声明类型等于指定的声明类型 并且值以指定的声明值 开头,则传递该声明 |
以下部分提供了声明规则的基本介绍,并提供了有关何时使用此规则的更多详细信息。
关于声明规则
声明规则表示使用传入声明、向其应用条件 (if x, then y) 并基于条件参数生成传出声明的业务逻辑的实例。 下面的列表概述了在进一步阅读本主题中的内容之前应了解的有关声明规则的重要提示:
在“AD FS 管理”管理单元中,只能使用声明规则模板创建声明规则
声明规则处理以下两种传入声明:直接来自声明提供程序(如 Active Directory 或另一个联合身份验证服务),或来自声明提供程序信任上的接受转换规则的输出。
声明规则由声明颁发引擎按给定规则集内的时间顺序处理。 通过为规则设置优先级,可以进一步优化或筛选由给定规则集内以前的规则生成的声明。
声明规则模板始终要求你指定传入声明类型。 但是,你可以使用单个规则处理声明类型相同的多个声明值。
有关声明规则和声明规则集的更多详细信息,请参阅声明规则的角色。 有关如何处理规则的详细信息,请参阅声明引擎的角色。 有关如何处理声明规则集的详细信息,请参阅声明管道的角色。
传递所有声明值
使用此操作时,将指定声明类型的所有传入声明值作为传出声明传递。 例如,当传入声明类型指定为“角色”声明类型时,将所有传入声明值逐个复制到传出声明类型为“角色”的新传出声明中。
筛选声明
在 AD FS 中,术语声明筛选指筛选或限制传入声明值,以便仅将特定值作为传出声明传递或发送。 “传递或筛选传入声明”规则模板使该功能变为可能。 在此规则的属性内,你可以设置传入值筛选条件,以便仅传递满足指定条件的值。
例如,如果传入声明类型与“角色”声明类型匹配,或者你可能只想发出有关用户姓名的声明,而不发出包含用户身份证号的声明,则可以使用此规则仅传递与声明值“Purchaser”匹配的声明。
如果将某个筛选条件与此规则结合使用,将检查所有传入声明,以确定与该规则所设条件匹配的声明。 忽略其他所有声明,以便仅传递与所选声明类型匹配的指定声明值。
例如,如下图所示,如果为规则设置一个条件,该条件仅筛选与 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);
创建自定义规则的最佳做法
可以向每个声明的一个或多个属性应用筛选器,如下表所述。
声明属性 | 说明 |
---|---|
类型 | 声明类型(通常以 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 表示如何解释声明值中包含的信息。 通常,ValueType 将设置为 http://www.w3.org/2001/XMLSchema#string,但 Claim 值可以包含 Base64Binary 编码数据(例如,图像)或日期、布尔值等。 |
颁发者 | 发出方表示上一次发出有关用户的声明的参与方。 如果声明是从声明提供程序联合服务器获取的,则所有声明的发出方都将设置为“本地机构”。 如果声明由联合提供程序联合服务器接收,则声明的发出方将设置为已对令牌签名的声明提供程序的声明提供程序标识符。 因此,当处理从声明提供程序收到的声明上的规则时,所有声明的发出方都将设置为相同的值。 为信赖方创作规则时,可使用 issuer 属性来区分来自不同声明提供程序的声明。 |
OriginalIssuer | 此声明属性旨在说明最初发出声明的联合服务器。 由于声明的 issuer 属性设置为对令牌签名的最后一台联合服务器,因此,在声明已流经多台联合服务器的情况下,original issuer 非常有用(例如,从联合提供程序联合服务器收到令牌的信赖方可能会想知道哪些特定声明提供程序联合服务器对用户进行了身份验证) |
属性 | 除上述五种属性外,每个声明还有一个可以存储命名属性的属性包。 这些属性在令牌中不会序列化,只能用于在单台联合服务器范围内的声明发出管道的组件之间传递信息。 例如,在声明提供程序规则处理然后在信赖方规则中引用属性的过程中设置该属性。 |