使用事件和日志记录排查 Active Directory 联合身份验证服务问题

Active Directory 联合身份验证服务 (AD FS) 提供了两个主要日志,可用于排查问题。 它们是:

  • 管理员日志。
  • 跟踪日志。

查看管理员日志

管理员日志提供有关正在发生的问题的概括信息,默认启用。 查看管理员日志的步骤:

  1. 打开“事件查看器”。

  2. 展开“应用程序和服务日志”。

  3. 展开“AD FS”。

  4. 选择“管理员”。

    Screenshot of the Event Viewer with the Admin option called out.

使用跟踪日志

跟踪日志记录了详细的信息,在排查问题时是最有用的日志。 由于可以在短时间内生成大量跟踪日志信息,可能影响系统性能,因此默认禁用跟踪日志。

启用和查看跟踪日志的步骤

  1. 打开“事件查看器”并展开“应用程序和服务日志”。

  2. 右键单击“应用程序和服务日志”,然后选择“查看”。 然后选择“显示分析和调试日志”。 此窗格显示更多节点。

    Screenshot of the Event Viewer showing that the user right-clicked Applications and Services Log and selected View with the Show Analytic and Debug Logs option called out.

  3. 展开“AD FS 跟踪”。

  4. 右键单击“调试”,然后选择“启用日志”。

    Screenshot of the Event Viewer showing that the user right-clicked Debug with the Enable Log option called out.

Windows Server 2016 上 AD FS 的事件审核信息

默认情况下,Windows Server 2016 中的 AD FS 启用了基本级别的审核。 在基本审核级别下,对于单个请求,管理员最多可看到五个事件。 此信息表明管理员为了查看单个请求而必须查看的事件数量显著减少。 可以使用以下 PowerShell cmdlet 来提高或降低审核级别:

Set-AdfsProperties -AuditLevel

下表说明了可用的审核级别。

审核级别 PowerShell 语法 说明
Set-AdfsProperties -AuditLevel None 审核已禁用,不会记录任何事件。
基本(默认) Set-AdfsProperties -AuditLevel Basic 对于单个请求,最多记录 5 个事件。
“详细” Set-AdfsProperties -AuditLevel Verbose 记录所有事件。 此级别会记录每个请求的大量信息。

若要查看当前审核级别,可使用以下 PowerShell 命令:Get-AdfsProperties

Screenshot of the PowerShell window showing the results of the Get-AdfsProperties cmdlet with the Audit Level property called out.

可以使用以下 PowerShell cmdlet 来提高或降低审核级别:Set-AdfsProperties -AuditLevel

Screenshot of the PowerShell window showing the Set-AdfsProperties -AuditLevel Verbose cmdlet typed in the command prompt.

事件类型

AD FS 事件的类型因 AD FS 所处理的请求类型而异。 每种类型的事件都有与之关联的特定数据。 可以在登录请求和系统请求之间区分事件类型。 登录请求可能是令牌请求,系统请求可能是服务器-服务器调用,包括提取配置信息。

下表说明了事件的基本类型。

事件类型 事件 ID 说明
新凭据验证成功 1202 联合身份验证服务成功验证新凭据的请求。 此事件包括 WS-Trust、WS 联合身份验证、SAML-P(生成 SSO 的第一阶段)和 OAuth 授权终结点。
新凭据验证错误 1203 一个请求,其中的联合身份验证服务验证新凭据失败。 此事件包括 WS-Trust、WS 联合身份验证、SAML-P(生成 SSO 的第一阶段)和 OAuth 授权终结点。
应用程序令牌成功 1200 联合身份验证服务成功发出安全令牌的请求。 对于 WS 联合身份验证和 SAML-P,在使用 SSO 项目(如 SSO Cookie)处理请求时,会记录此事件。
应用程序令牌失败 1201 联合身份验证服务发出安全令牌失败的请求。 对于 WS 联合身份验证和 SAML-P,在使用 SSO 项目(如 SSO Cookie)处理请求时,会记录此事件。
密码更改请求成功 1204 联合身份验证服务成功处理密码更改请求的事务。
密码更改请求错误 1205 联合身份验证服务处理密码更改请求失败的事务。
注销成功 1206 描述成功的注销请求。
注销失败 1207 描述失败的注销请求。

安全审核

AD FS 服务帐户的安全审核有时可以帮助跟踪密码更新、请求/响应日志记录、请求内容标头和设备注册结果的问题。 默认情况下,AD FS 服务帐户的审核处于禁用状态。

启用安全审核

  1. 选择“开始”。 然后转到“程序”>“管理工具”,然后选择“本地安全策略”。

  2. 转到“安全设置\本地策略\用户权限管理”文件夹,然后双击“生成安全审核”。

  3. “本地安全设置”选项卡上,验证是否列出了 AD FS 服务帐户。 如果该帐户不存在,请选择“添加用户或组”并将其添加到列表中。 然后选择“确定” 。

  4. 使用提升的权限打开命令提示符并运行以下命令以启用审核:auditpol.exe /set /subcategory:"Application Generated" /failure:enable /success:enable

  5. 关闭“本地安全策略”,然后打开“AD FS 管理”管理单元。

  6. 若要打开 AD FS 管理单元,请选择“启动”。 转到“程序”>“管理工具”,然后选择“AD FS 管理”。

  7. 在“操作”窗格中,选择“编辑联合身份验证服务属性” 。

  8. 在“联合身份验证服务属性”对话框中,选择“事件”选项卡 。

  9. 选中“成功审核”“失败审核”复选框。

  10. 选择“确定”

    Screenshot of the Events tab of the Federation Service Properties dialog box showing that the Success audits and Failure audits options are selected.

注意

仅当 AD FS 位于独立成员服务器上时,才使用上述说明。 如果 AD FS 在域控制器而不是本地安全策略上运行,请使用位于 Group Policy Management/Forest/Domains/Domain Controllers 中的“默认域控制器策略”。 选择“编辑”,转到 Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Management。

Windows Communication Foundation 和 Windows Identity Foundation 消息

除了跟踪日志记录之外,有时还可能需要查看 Windows Communication Foundation (WCF) 和 Windows Identity Foundation (WIF) 消息,以便排查问题。 可以通过修改 AD FS 服务器上的 Microsoft.IdentityServer.ServiceHost.Exe.Config 文件来查看这些消息。

此文件位于 <%system root%>\Windows\ADFS 中,采用 XML 格式。 以下示例中显示了该文件的相关部分:

<!-- To enable WIF tracing, change the following switchValue to the desired trace level - Verbose, Information, Warning, Error, Critical -->

<source name="Microsoft.IdentityModel" switchValue="Off"> … </source>

<!-- To enable WCF tracing, change the following switchValue to the desired trace level - Verbose, Information, Warning, Error, Critical -->

<source name="System.ServiceModel" switchValue="Off" > … </source>

应用这些更改后,保存配置,然后重启 AD FS 服务。 通过设置相应的开关启用这些跟踪后,它们将显示在 Windows 事件查看器的 AD FS 跟踪日志中。

关联事件

最难排查的问题之一是会生成大量错误或调试事件的访问问题。

为了帮助解决此问题,AD FS 在管理员日志和调试日志中关联记录到事件查看器的所有事件。 其中每个日志都通过使用称为活动 ID 的唯一全局唯一标识符 (GUID) 对应于特定的请求。 AD FS 在使用被动请求者配置文件向 Web 应用程序提供令牌发出请求时生成此 ID。 AD FS 还会在将请求直接发送到使用 WS-Trust 的应用程序的声明提供程序时生成 ID。

Screenshot of the Details tab of the event Properties dialog box with the ActivityID value called out.

此活动 ID 在请求的整个持续时间内保持不变,并作为在事件查看器中为该请求记录的每个事件的一部分进行记录。 这意味着:

  • 使用此活动 ID 筛选或搜索事件查看器有助于跟踪与该令牌请求对应的所有相关事件。
  • 不同的计算机记录相同的活动 ID,这样就可以跨多个计算机(例如联合服务器代理 (FSP))对用户请求进行故障排除。
  • 活动 ID 也会出现在用户的浏览器中(不管 AD FS 请求以何种方式失败),因此用户可以将此 ID 告知技术支持或 IT 支持人员。

Screenshot of the Details tab of the event Properties dialog box with the client request ID value called out.

每当 AD FS 服务器上的令牌颁发过程失败时,AD FS 还会记录调用方 ID 事件,这有助于进行故障排除。 此事件包含以下声明之一的声明类型和值(假设此信息已作为令牌请求的一部分传递给联合身份验证服务):

  • https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountnameh
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upnh
  • https://schemas.microsoft.com/ws/2008/06/identity/claims/upn
  • http://schemas.xmlsoap.org/claims/UPN
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressh
  • https://schemas.microsoft.com/ws/2008/06/identity/claims/emailaddress
  • http://schemas.xmlsoap.org/claims/EmailAddress
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
  • https://schemas.microsoft.com/ws/2008/06/identity/claims/name
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier

调用方 ID 事件还会记录活动 ID,这样你就可以使用该活动 ID 筛选或搜索特定请求的事件日志。

后续步骤