AD FS 故障排除 - 声明规则语法

声明是一个对象对其自身或另一个对象所进行的陈述。 声明由信赖方颁发,它们被赋予一个或多个值,然后打包在由 AD FS 服务器颁发的安全令牌中。 本文介绍了声明语法和创建。 有关声明颁发的信息,请参阅 AD FS 故障排除 - 声明颁发

注意

你可以使用 AD FS 帮助站点上的 ClaimsXRay 来帮助排查声明问题。

处理声明规则的方式

声明规则是使用声明引擎通过声明管道进行处理的。 声明引擎是联合身份验证服务的一个逻辑组件,它检查用户提供的传入声明集,然后根据每个规则中的逻辑生成输出声明集。

如何创建声明规则

声明规则对于联合身份验证服务中的每个联合信任关系单独进行创建,不在多个信任间共享。 可以通过声明规则模板创建规则,使用声明规则语言创建规则来从头开始,或者使用 Windows PowerShell 来自定义规则。

了解声明规则语言的组件

声明规则语言包括以下组件(由“ =>”运算符分隔):

  • 一个条件:用来检查输入声明并确定是否应执行规则的颁发语句。 它表示一个逻辑表达式,且评估结果必须为 true 才会执行规则主体部分。

  • 一个颁发语句。

例如:

c:[type == "Name", value == "domain user"] => issue(type = "Role", value = "employee");

此声明具有以下项:

  • 条件 - c:[type == "Name", value == "domain user"] - 评估 Windows 帐户名称的输入声明是否为域用户。
  • 颁发 - issue(type = "Role", value = "employee") - 如果条件成立,则会向输入声明中添加角色为员工的一个新声明。

有关声明和语法的详细信息,请参阅声明规则语言的角色

声明规则编辑器

完成声明并选择确定后,声明规则编辑器将执行语法检查。 因此,如果语法不正确,则编辑器会告知你。

“AD FS 管理”对话框的屏幕截图,其中显示了一条消息,指出自定义声明规则语法无效。

事件日志

尝试使用日志对声明进行故障排除时,最佳方法是查找声明输出。 可以在事件日志中查找 1000 和 1001 事件。

“事件属性”对话框的屏幕截图,其中显示了 ID 为1000 的事件的结果。

创建示例应用程序

还可以创建一个回显你的声明的示例应用程序。 例如,你可以使用示例应用程序,创建一个信赖方并使其具有你尝试排查的相同声明,并查看该声明是否有任何问题。

浏览器中显示的示例应用程序的屏幕截图。

此处提供了一个很好的示例 Web 应用。 此应用回显它从信赖方收到的声明。 若要使用此应用,需要通过以下方式编辑 web.config 应用:

  • https://app1.contoso.com/sampapp 更改为将用于托管示例应用的 URL。
  • 将 sts.contoso.com 的所有实例更改为指向 AD FS 联合服务器。
  • 将指纹替换为你的指纹。
  • 用适合你方案的值替换 decryptionKeyvalidationKey

Visual Studio 的屏幕截图,其中显示了 Web 配置文件。

以下博客文章提供了有关设置此项的精彩深入说明。

后续步骤