ADFS 2.0 错误:拒绝访问

本文提供了修复 Active Directory 联合服务 (AD FS) 2.0 错误的解决方案。

原始 KB 数: 3044977

总结

大多数 AD FS 2.0 问题属于以下主要类别之一。 本文包含用于排查声明规则问题的分步说明。

现象

  • AD FS 服务颁发的令牌没有适当的声明来授权用户访问应用程序。

  • AD FS 服务器返回以下错误消息:

    拒绝访问

  • 如果使用“配置 ADFS 服务器进行故障排除”主题启用 AD FS 审核,则事件日志中记录了以下错误:

    事件 ID 325
    联合身份验证服务无法授权调用方颁发令牌。

解决方法

若要解决此问题,请按给定的顺序执行以下步骤。 这些步骤将帮助你确定问题的原因。 确保检查每个步骤后是否解决问题。

步骤 1:获取有关所需声明的详细信息

  • 从信赖方所有者确定 SAML 令牌中需要哪些声明类型。
  • 确定用于对用户进行身份验证的声明提供程序。

例如:

  • 信赖方提供程序可能指示它希望提供用户的电子邮件名称和角色值。

  • 如果在这种情况下声明提供程序为“Active Directory”,则应在“Active Directory”级别配置接受声明规则。

    注意

    如果声明提供程序是另一个安全令牌服务(STS),则必须创建传递或转换声明规则,以接受要传递给信赖方的本地定义的声明类型中的声明值。

  • 在信赖方级别为这些声明创建直通声明。

步骤 2:检查 AD FS 是否基于授权规则拒绝令牌

为此,请右键单击信赖方,单击“ 编辑声明规则”,然后单击“ 颁发授权规则 ”选项卡。检查规则信息时,请考虑以下准则:

  • 将处理所有授权声明规则。
  • 如果未定义任何规则,AD FS 服务器将拒绝所有用户。
  • 还可以使用允许列表方法,而不是使用“允许所有”规则。 在这种情况下,请定义一组规则,这些规则指定用户必须颁发令牌的条件。
  • 在阻止列表方法中,需要一个“允许所有规则”,以及一个或多个基于条件的拒绝规则。
  • 拒绝规则始终替代允许规则。 这意味着,如果用户的“允许”和“拒绝”声明条件均为 true,则会遵循“拒绝”规则。
  • 对于基于其他声明值来允许或拒绝令牌的授权规则,应已从声明提供程序信任级别将这些声明推送到声明管道中。

步骤 3:捕获 Fiddler 跟踪

捕获 Fiddler Web 调试器跟踪以捕获与 AD FS 服务的通信,并确定是否颁发了 SAML 令牌。 如果颁发了 SAML 令牌,请对令牌进行解码,以确定是否颁发了正确的声明集。

有关此过程的详细信息,请参阅 AD FS 2.0:如何使用 Fiddler Web 调试器分析 WS 联合被动登录

若要查找 AD FS 服务颁发的 SAML 令牌,请执行以下操作:

  • 在 fiddler 跟踪中,查看 AD FS 的响应,以确定 AD FS 服务设置 MSISAuth 和 MSISAuthenticated Cookie 的位置。 或者,在 AD FS 设置 MSISAuth 和 MSISAuthenticated Cookie 后查看请求。
  • 选择令牌,然后在 Fiddler 中启动 TextWizard。 将 URLDecode 用于 RSTR(WS-Fed)或 FromDeflatedSAML 作为 SAML 2.0 协议响应。

步骤 4:启用 ADFS 审核并检查令牌是否已颁发或拒绝,以及正在处理的声明列表

将 AD FS 服务器配置为将 AD FS 事件的审核记录到安全日志。 若要配置Windows 安全日志以支持 AD FS 事件的审核,请执行以下步骤:

  1. 单击“开始”,指向管理工具,然后单击“本地安全策略”。
  2. 双击“本地策略”,然后单击“审核策略”。
  3. 在详细信息窗格中,双击“ 审核对象访问”。
  4. “审核对象访问属性”页上,选择“成功”或“失败,然后单击“确定”。
  5. 关闭本地安全设置管理单元。
  6. 在命令提示符下,键入 gpupdate /force,然后按 Enter 立即刷新本地策略。

还可以使用以下 GPO 配置Windows 安全日志:

计算机配置\策略\Windows 设置\安全设置\高级审核策略配置\审核策略\对象访问\审核应用程序生成 - 成功和失败配置 ADFS

这在 AD FS 拒绝用户令牌的情况下非常有用。 AD FS 审核过程将报告在拒绝令牌之前生成的事件和声明。 这有助于确定哪个声明导致应用拒绝规则。 检查安全事件日志,特别是针对事件 ID 299、500、501 和 325。

步骤 5:确定是否需要自定义声明

如果默认声明规则模板无法满足声明颁发要求,则可能需要编写自定义声明。 有关详细信息,请参阅 了解 AD FS 2.0 及更高中的声明规则语言。

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。