有关 AD FS 的常见问题解答(常见问题解答)

本文提供有关 Active Directory 联合身份验证服务(AD FS)的常见问题的解答。 它划分为基于问题类型的部分。

部署

如何从旧版 AD FS 升级/迁移?

可以通过完成以下链接文章之一中的步骤来升级/迁移 AD FS:

如果需要从 AD FS 2.0 或 2.1 升级(Windows Server 2008 R2 或 Windows Server 2012),请使用位于 C:\Windows\ADFS 的内置脚本。

为什么 AD FS 安装需要重启服务器?

Windows Server 2016 中添加了 HTTP/2 支持,但 HTTP/2 不能用于客户端证书身份验证。 许多 AD FS 方案都使用客户端证书身份验证。 许多客户端不支持使用 HTTP/1.1 重试请求。 因此,AD FS 场配置将本地服务器的 HTTP 设置重新配置为 HTTP/1.1。 此重新配置需要重启服务器。

是否可以使用 Windows Server 2016 Web 应用程序代理服务器将 AD FS 场发布到 Internet,而无需升级后端 AD FS 场?

此配置受支持,但不支持新的 AD FS 2016 功能。 从 AD FS 2012 R2 迁移到 AD FS 2016 期间,此配置是暂时的。 它不应在很长一段时间内使用。

是否可以在不将代理发布到 Office 365 的情况下为 Office 365 部署 AD FS?

是的,但作为副作用:

  • 需要手动管理令牌签名证书的更新,因为Microsoft Entra ID 无法访问联合元数据。 有关手动更新令牌签名证书的详细信息,请参阅 续订 Office 365 和 Microsoft Entra ID 的联合证书
  • 无法使用旧身份验证流(例如 ExO 代理身份验证流)。

AD FS 和 Web 应用程序代理服务器的负载均衡要求是什么?

AD FS 是一个无状态系统,因此对登录来说,负载均衡相当简单。下面是负载均衡系统的一些关键建议:

  • 不应使用 IP 相关性配置负载均衡器。 在某些 Exchange Online 方案中,IP 相关性可能会将不必要的负载置于服务器的子集上。
  • 负载均衡器不得终止 HTTPS 连接并启动与 AD FS 服务器的新连接。
  • 负载均衡器应确保在将连接 IP 地址发送到 AD FS 时,应将其转换为 HTTP 数据包中的源 IP。 如果负载均衡器无法在 HTTP 数据包中发送源 IP,负载均衡器必须将 IP 地址添加到 X-Forwarded-For 标头。 必须执行此步骤才能正确处理某些与 IP 相关的功能(如禁止 IP 和 Extranet 智能锁定)。 如果未正确实现此配置,可以降低安全性。
  • 负载均衡器应支持 SNI。 如果没有,请确保 AD FS 配置为创建 HTTPS 绑定来处理不支持 SNI 的客户端。
  • 负载均衡器应使用 AD FS HTTP 运行状况探测终结点来检测 AD FS 还是 Web 应用程序代理服务器正在运行。 如果未返回 200 OK,则它应排除它们。

AD FS 支持哪些多林配置?

AD FS 支持多个多林配置。 它依赖于基础 AD DS 信任网络在多个受信任领域对用户进行身份验证。 我们强烈建议使用双向林信任,因为它们更易于设置,这有助于确保信任系统正常工作。

此外:

  • 如果你有单向林信任,例如包含合作伙伴标识的外围网络(也称为 DMZ)林,我们建议在公司林中部署 AD FS。 将外围网络林视为另一个通过 LDAP 连接的本地声明提供程序信任。 在这种情况下,Windows 集成身份验证不适用于外围网络林用户。 他们需要使用密码身份验证,因为它是 LDAP 的唯一支持机制。

    如果无法使用此选项,需要在外围网络林中设置另一台 AD FS 服务器。 将其添加为企业林中的 AD FS 服务器中的声明提供程序信任。 用户需要执行主领域发现,但 Windows 集成身份验证和密码身份验证都将正常工作。 在外围网络林中的 AD FS 中对颁发规则进行适当的更改,因为企业林中的 AD FS 无法从外围网络林获取有关用户的详细信息。

  • 支持域级信任,并且可以正常工作。 但我们强烈建议你迁移到林级信任模型。 还需要确保 UPN 路由和 NetBIOS 名称解析正常工作。

注释

如果将选择性身份验证与双向信任配置一起使用,请确保向调用方用户授予“允许对目标服务帐户进行身份验证”权限。

AD FS Extranet 智能锁定是否支持 IPv6?

是的,IPv6 地址被视为熟悉和未知位置。

设计

哪些第三方多重身份验证提供程序可用于 AD FS?

AD FS 为要集成的第三方多重身份验证提供程序提供可扩展的机制。 没有为此设置的认证计划。 假设供应商已在发布前执行必要的验证。

此处提供了已通知Microsoft供应商列表: AD FS 的多重身份验证提供程序。 可能存在我们不知道的提供商。 我们会在发现新列表时更新列表。

AD FS 是否支持第三方代理?

是的,第三方代理可以放在 AD FS 的前面,但任何第三方代理都必须支持用于代替 Web 应用程序代理的 MS-ADFSPIP 协议

我们目前已了解以下第三方提供商。 可能存在我们不知道的提供商。 我们会在发现新列表时更新此列表。

AD FS 2016 的容量规划大小调整电子表格在哪里?

可以 下载 AD FS 2016 版本的电子表格。 还可以将此电子表格用于 Windows Server 2012 R2 中的 AD FS。

如何确保 AD FS 和 Web 应用程序代理服务器支持 Apple 的 ATP 要求?

Apple 发布了一组名为“应用传输安全”(ATS)的要求,这些要求可能会影响对 AD FS 进行身份验证的 iOS 应用的调用。 通过确保 AD FS 和 Web 应用程序代理服务器支持 使用 ATS 进行连接的要求,可以确保其符合要求。 具体而言,应验证:

  • AD FS 和 Web 应用程序代理服务器支持 TLS 1.2。
  • TLS 连接的协商密码套件将支持完美的前向保密。

有关启用或禁用 SSL 2.0 和 3.0 和 TLS 1.0、1.1 和 1.2 的信息,请参阅 AD FS 中的“管理 SSL 协议”。

为了确保 AD FS 和 Web 应用程序代理服务器仅协商支持 ATP 的 TLS 密码套件,可以禁用不符合 ATP 的密码套件列表中的所有密码套件。 若要禁用它们,请使用 Windows TLS PowerShell cmdlet

开发 人员

AD FS 为针对 Active Directory 进行身份验证的用户生成id_token时,id_token中如何生成“子”声明?

“sub”声明的值是客户端 ID 和定位点声明值的哈希。

当用户通过 WS-Fed/SAML-P 的远程声明提供程序信任登录时,刷新令牌和访问令牌的生存期是多少?

刷新令牌的生存期将是 AD FS 从远程声明提供程序信任获得的令牌的生存期。 访问令牌的生存期将是为其颁发访问令牌的信赖方的令牌生存期。

除了 openid 范围之外,我需要返回配置文件和电子邮件范围。 是否可以使用范围获取详细信息? 如何在 AD FS 中执行此作?

可以使用自定义id_token在id_token本身中添加相关信息。 有关详细信息,请参阅 自定义在id_token中发出的声明

如何在 JWT 令牌中颁发 JSON Blob?

AD FS 2016 中为此方案添加了特殊的 ValueType (http://www.w3.org/2001/XMLSchema#json) 和转义字符 (\x22)。 对颁发规则和访问令牌的最终输出使用以下示例。

示例颁发规则:

=> issue(Type = "array_in_json", ValueType = "http://www.w3.org/2001/XMLSchema#json", Value = "{\x22Items\x22:[{\x22Name\x22:\x22Apple\x22,\x22Price\x22:12.3},{\x22Name\x22:\x22Grape\x22,\x22Price\x22:3.21}],\x22Date\x22:\x2221/11/2010\x22}");

在访问令牌中颁发的声明:

"array_in_json":{"Items":[{"Name":"Apple","Price":12.3},{"Name":"Grape","Price":3.21}],"Date":"21/11/2010"}

是否可以将资源值作为范围值的一部分传递,就像针对 Microsoft Entra ID 发出请求一样?

借助 Windows Server 2019 上的 AD FS,你现在可以传递嵌入在 scope 参数中的资源值。 范围参数可以组织为空格分隔的列表,其中每个条目的结构为资源/范围。

AD FS 是否支持 PKCE 扩展?

Windows Server 2019 中的 AD FS 支持 OAuth 授权代码授予流的代码交换证明密钥(PKCE)。

AD FS 支持哪些允许的范围?

受支持:

  • aza. 如果使用 适用于 Broker 客户端的 OAuth 2.0 协议扩展 ,并且范围参数包含范围 aza,则服务器会发出新的主刷新令牌,并在响应的refresh_token字段中设置它。 它还会将refresh_token_expires_in字段设置为新主刷新令牌的生存期(如果强制执行)。
  • openid。 允许应用程序请求使用 OpenID Connect 授权协议。
  • logon_cert。 允许应用程序请求登录证书,该证书可用于以交互方式登录经过身份验证的用户。 AD FS 服务器省略响应中的access_token参数,而是提供 Base64 编码的 CMS 证书链或 CMC 完整 PKI 响应。 有关详细信息,请参阅 “处理详细信息”。
  • user_impersonation。 如果要从 AD FS 请求代表访问令牌,则需要该令牌。 有关如何使用此范围的详细信息,请参阅 使用 OAuth 和 AD FS 2016 使用 On-Behalf-Of(OBO)生成多层应用程序

不支持:

  • vpn_cert。 允许应用程序请求 VPN 证书,该证书可用于使用 EAP-TLS 身份验证建立 VPN 连接。 不再支持此范围。
  • 电子邮件。 允许应用程序请求已登录用户的电子邮件声明。 不再支持此范围。
  • 轮廓。 允许应用程序为已登录用户请求与配置文件相关的声明。 不再支持此范围。

运营

如何替换 AD FS 的 SSL 证书?

AD FS SSL 证书与 AD FS 管理管理单元中的 AD FS 服务通信证书不同。 若要更改 AD FS SSL 证书,需要使用 PowerShell。 按照 在 AD FS 和 WAP 2016 中管理 SSL 证书的指导进行作。

如何启用或禁用 AD FS 的 TLS/SSL 设置?

有关禁用和启用 SSL 协议和密码套件的信息,请参阅 AD FS 中的“管理 SSL 协议”。

代理 SSL 证书是否需要与 AD FS SSL 证书相同?

  • 如果代理用于代理使用 Windows 集成身份验证的 AD FS 请求,则代理 SSL 证书必须使用与联合服务器 SSL 证书相同的密钥。
  • 如果启用了 AD FS ExtendedProtectionTokenCheck 属性(AD FS 中的默认设置),则代理 SSL 证书必须使用与联合服务器 SSL 证书相同的密钥。
  • 否则,代理 SSL 证书可以具有不同于 AD FS SSL 证书的密钥。 它必须满足相同的 要求

为什么我在 AD FS 上只看到密码登录,而不是我配置的其他身份验证方法?

当应用程序显式要求映射到已配置和已启用身份验证方法的特定身份验证 URI 时,AD FS 仅在登录屏幕上显示一种身份验证方法。 该方法在 WS-Federation 请求中的 wauth 参数中传达。 它在 SAML 协议请求中的 RequestedAuthnCtxRef 参数中传达。 仅显示请求的身份验证方法。 (例如,密码登录。)

将 AD FS 与 Microsoft Entra ID 配合使用时,应用程序通常会将 prompt=login 参数发送到 Microsoft Entra ID。 默认情况下,Microsoft Entra ID 将此参数转换为向 AD FS 请求新的基于密码的登录。 此方案是你可能会在网络中看到 AD FS 密码登录或看不到使用证书登录的选项的最常见原因。 通过更改 Microsoft Entra ID 中的联合域设置,可以轻松解决此问题。

有关详细信息,请参阅 Active Directory 联合身份验证服务 prompt=login 参数支持

如何更改 AD FS 服务帐户?

若要更改 AD FS 服务帐户,请使用 AD FS 工具箱服务帐户 PowerShell 模块。 有关说明,请参阅 更改 AD FS 服务帐户

如何将浏览器配置为将 Windows 集成身份验证(WIA)与 AD FS 配合使用?

是否可以关闭 BrowserSsoEnabled?

如果你没有基于 AD FS 或 Windows Hello 企业版证书注册的设备通过 AD FS 的访问控制策略,则可以关闭 BrowserSsoEnabledBrowserSsoEnabled 允许 AD FS 从包含设备信息的客户端收集主刷新令牌(PRT)。 如果没有该令牌,AD FS 的设备身份验证在 Windows 10 设备上将不起作用。

AD FS 令牌的有效时间是多少?

管理员经常想知道用户获得单一登录(SSO)的时间,而无需输入新凭据,以及管理员如何控制该行为。 AD FS 单一登录设置中介绍了该行为以及控制该行为的配置设置。

此处列出了各种 Cookie 和令牌的默认生存期(以及控制生存期的参数):

已注册的设备

  • PRT 和 SSO Cookie:最多 90 天,由 PSSOLifeTimeMins 管理。 (如果设备至少每 14 天使用一次。此时间窗口由 DeviceUsageWindow 控制。

  • 刷新令牌:根据上述参数计算,以提供一致的行为。

  • access_token:默认情况下,基于信赖方一小时。

  • id_token:与access_token相同。

未注册的设备

  • SSO Cookie:默认情况下为 8 小时,由 SSOLifetimeMins 管理。 启用“使我保持登录状态”(KMSI)时,默认值为 24 小时。 此默认值可通过 KMSILifetimeMins 进行配置。

  • 刷新令牌:默认情况下为 8 小时。 如果启用了 KMSI,则为 24 小时。

  • access_token:默认情况下,基于信赖方一小时。

  • id_token:与access_token相同。

AD FS 是否支持机密客户端的隐式流?

AD FS 不支持机密客户端的隐式流。 客户端身份验证仅针对令牌终结点启用,AD FS 不会在没有客户端身份验证的情况下颁发访问令牌。 如果机密客户端需要访问令牌,并且还需要用户身份验证,则需要使用授权代码流。

AD FS 是否支持 HTTP 严格传输安全性(HSTS)?

HSTS 是 Web 安全策略机制。 它有助于缓解具有 HTTP 和 HTTPS 终结点的服务的协议降级攻击和 Cookie 劫持。 它允许 Web 服务器声明 Web 浏览器(或其他合规的用户代理)应仅通过使用 HTTPS 与它们交互,而绝不应通过 HTTP 协议与之交互。

Web 身份验证流量的所有 AD FS 终结点都以独占方式通过 HTTPS 打开。 因此,AD FS 可缓解 HSTS 策略机制创建的威胁。 (根据设计,没有降级为 HTTP,因为 HTTP 中没有侦听器。AD FS 还阻止将 Cookie 发送到具有 HTTP 协议终结点的另一台服务器,方法是使用安全标志标记所有 Cookie。

因此,不需要 AD FS 服务器上的 HSTS,因为无法降级 HSTS。 AD FS 服务器符合符合性要求,因为它们无法使用 HTTP,并且 Cookie 被标记为安全。

最后,AD FS 2016(具有最 up-to日期修补程序)和 AD FS 2019 支持发出 HSTS 标头。 若要配置此行为,请参阅 使用 AD FS 自定义 HTTP 安全响应标头

X-MS-Forwarded-Client-IP 不包含客户端的 IP。 它包含代理前面的防火墙的 IP。 在哪里可以获取客户端的 IP?

不建议在 Web 应用程序代理服务器之前执行 SSL 终止。 如果在 Web 应用程序代理服务器前面完成,X-MS-Forwarded-Client-IP 将在 Web 应用程序代理服务器前包含网络设备的 IP。 下面是 AD FS 支持的各种 IP 相关声明的简要说明:

  • X-MS-Client-IP。 连接到 STS 的设备的网络 IP。 对于 Extranet 请求,此声明始终包含 Web 应用程序代理服务器的 IP。
  • X-MS-Forwarded-Client-IP。 多值声明,其中包含由 Exchange Online 转发到 AD FS 的任何值。 它还包含连接到 Web 应用程序代理服务器的设备 IP 地址。
  • Userip。 对于 Extranet 请求,此声明包含 X-MS-Forwarded-Client-IP 的值。 对于 Intranet 请求,此声明包含与 X-MS-Client-IP 相同的值。

AD FS 2016(具有最多 up-to日期修补程序)和更高版本还支持捕获 X-Forwarded-For 标头。 任何未在第 3 层(IP 保留)转发的负载均衡器或网络设备都应将传入的客户端 IP 添加到行业标准 X-Forwarded-For 标头。

我尝试在 UserInfo 终结点上获取更多声明,但只会返回主题。 如何获取更多声明?

AD FS UserInfo 终结点始终返回 OpenID 标准中指定的主题声明。 AD FS 不支持通过 UserInfo 终结点请求的其他声明。 如果需要 ID 令牌中的更多声明,请参阅 AD FS 中的自定义 ID 令牌

为什么出现将 AD FS 服务帐户添加到企业密钥管理员组失败的警告?

仅当具有 FSMO PDC 角色的 Windows Server 2016 域控制器存在于域中时,才会创建此组。 若要解决此错误,可以手动创建组。 将服务帐户添加为组成员后,请按照以下步骤添加所需的权限:

  1. 打开“Active Directory 用户和计算机”
  2. 在左窗格中右键单击域名,然后选择“ 属性”。
  3. 选择“安全性”。 (如果缺少“安全”选项卡,请打开“视图”菜单上的高级功能
  4. 选择 “高级”、“ 添加”,然后选择 主体
  5. 此时会显示 “选择用户”、“计算机”、“服务帐户”或“组 ”对话框。 在 “输入要选择的对象名称” 框中,输入 密钥管理组。 选择“确定”
  6. 在“ 应用于 ”框中,选择 “子代用户”对象
  7. 滚动到页面底部,然后选择“ 全部清除”。
  8. “属性 ”部分中,选择“ 读取 msDS-KeyCredentialLink ”和 “写入 msDS-KeyCredentialLink”。

如果服务器未使用 SSL 证书在链中发送所有中间证书,为什么 Android 设备的新式身份验证会失败?

对于使用 Android ADAL 库的应用,Microsoft Entra ID 的身份验证可能会对联合用户失败。 应用在尝试显示登录页时将收到 AuthenticationException 。 在 Chrome 浏览器中,AD FS 登录页可能描述为不安全。

对于所有版本和所有设备,Android 不支持从证书的 authorityInformationAccess 字段下载其他证书。 此限制也适用于 Chrome 浏览器。 如果整个证书链未从 AD FS 传递,任何缺少中间证书的服务器身份验证证书都将导致此错误。

可以通过配置 AD FS 和 Web 应用程序代理服务器以及 SSL 证书来发送必要的中间证书来解决此问题。

从一台计算机导出 SSL 证书以导入到 AD FS 和 Web 应用程序代理服务器的计算机的个人存储时,请务必导出私钥并选择 “个人信息交换 - PKCS #12”。

此外,请确保 在证书路径中选择“包括所有证书”(如果可能 )并 导出所有扩展属性

在 Windows 服务器上运行 certlm.msc,并将 *.pfx 导入到计算机的个人证书存储中。 这样做将导致服务器将整个证书链传递到 ADAL 库。

注释

还应更新网络负载均衡器的证书存储,以包含整个证书链(如果存在)。

AD FS 是否支持 HEAD 请求?

AD FS 不支持 HEAD 请求。 应用程序不应对 AD FS 终结点使用 HEAD 请求。 使用这些请求可能会导致出现意外或延迟的 HTTP 错误响应。 你可能还会在 AD FS 事件日志中看到意外的错误事件。

使用远程 IdP 登录时,为何看不到刷新令牌?

如果 IdP 颁发的令牌有效期小于 1 小时,则不会颁发刷新令牌。 若要确保颁发刷新令牌,请将 IdP 颁发的令牌的有效性提高到一个多小时。

是否有任何方法可以更改 RP 令牌加密算法?

RP 令牌加密设置为 AES256。 不能将其更改为任何其他值。

在混合模式场上,尝试使用 Set-AdfsSslCertificate -Thumbprint 设置新的 SSL 证书时,我会收到错误。 如何在混合模式 AD FS 场中更新 SSL 证书?

混合模式 AD FS 场是临时的。 建议在规划期间在升级过程之前滚动更新 SSL 证书,或者在更新 SSL 证书之前增加场行为级别。 如果未遵循该建议,请使用以下说明更新 SSL 证书。

在 Web 应用程序代理服务器上,你仍然可以使用 Set-WebApplicationProxySslCertificate。 在 AD FS 服务器上,需要使用 netsh。 完成以下步骤:

  1. 选择 AD FS 2016 服务器的子集进行维护。

  2. 在上一步中选择的服务器上,通过 MMC 导入新证书。

  3. 删除现有证书:

    a。 netsh http delete sslcert hostnameport=fs.contoso.com:443

    b. netsh http delete sslcert hostnameport=localhost:443

    选项c. netsh http delete sslcert hostnameport=fs.contoso.com:49443

  4. 添加新证书:

    a。 netsh http add sslcert hostnameport=fs.contoso.com:443 certhash=THUMBPRINT appid="{5d89a20c-beab-4389-9447-324788eb944a}" certstorename=My verifyclientcertrevocation=Enable sslctlstorename=AdfsTrustedDevices

    b. netsh http add sslcert hostnameport=localhost:443 certhash=THUMBPRINT appid="{5d89a20c-beab-4389-9447-324788eb944a}" certstorename=My verifyclientcertrevocation=Enable

    选项c. netsh http add sslcert hostnameport=fs.contoso.com:49443 certhash=THUMBPRINT appid="{5d89a20c-beab-4389-9447-324788eb944a}" certstorename=My verifyclientcertrevocation=Enable clientcertnegotiation=Enable

  5. 在所选服务器上重启 AD FS 服务。

  6. 删除 Web 应用程序代理服务器的子集进行维护。

  7. 在所选的 Web 应用程序代理服务器上,通过 MMC 导入新证书。

  8. 使用以下 cmdlet 在 Web 应用程序代理服务器上设置新证书:

    • Set-WebApplicationProxySslCertificate -Thumbprint " CERTTHUMBPRINT"
  9. 重启所选 Web 应用程序代理服务器上的服务。

  10. 将所选的 Web 应用程序代理和 AD FS 服务器放回生产环境中。

以相同的方式更新 AD FS 和 Web 应用程序代理服务器的其余部分。

当 Web 应用程序代理服务器位于 Azure Web 应用程序防火墙(WAF)后面时,是否支持 AD FS?

AD FS 和 Web 应用程序服务器支持在终结点上不执行 SSL 终止的任何防火墙。 此外,AD FS/Web 应用程序代理服务器具有内置机制,用于:

  • 帮助防止常见的 Web 攻击,例如跨站点脚本。
  • 执行 AD FS 代理。
  • 满足 MS-ADFSPIP 协议定义的所有要求。

我收到“事件 441:发现了令牌绑定密钥错误的令牌”。 我该怎么解决此事件?

在 AD FS 2016 中,令牌绑定会自动启用,并导致代理和联合方案出现多个已知问题。 这些问题会导致此事件。 若要解决此事件,请运行以下 PowerShell 命令以删除令牌绑定支持:

Set-AdfsProperties -IgnoreTokenBinding $true

我已将场从 Windows Server 2016 中的 AD FS 升级到 Windows Server 2019 中的 AD FS。 AD FS 场的场行为级别已提升到 Windows Server 2019,但 Web 应用程序代理配置仍显示为 Windows Server 2016。

升级到 Windows Server 2019 后,Web 应用程序代理的配置版本将继续显示为 Windows Server 2016。 Web 应用程序代理没有 Windows Server 2019 的特定于新版本的功能。 如果在 AD FS 上提高了场行为级别,Web 应用程序代理将继续显示为 Windows Server 2016。 此行为是设计造成的。

是否可以在启用 ESL 之前估计 ADFSArtifactStore 的大小?

启用 ESL 后,AD FS 会跟踪 ADFSArtifactStore 数据库中用户的帐户活动和已知位置。 此数据库相对于跟踪的用户数和已知位置进行缩放。 计划启用 ESL 时,可以估计 ADFSArtifactStore 数据库将按每 100,000 个用户最多 1 GB 的速度增长。

如果 AD FS 场使用 Windows 内部数据库,则数据库文件的默认位置为 C:\Windows\WID\Data。 若要防止填充此驱动器,请确保在启用 ESL 之前至少具有 5 GB 的免费存储。 除了磁盘存储之外,规划在为用户填充 500,000 或更少用户填充启用 ESL 后,总进程内存将增长到 ESL。

我在 AD FS 2019 上收到事件 ID 570。 如何缓解此事件?

下面是事件的文本:

Active Directory trust enumeration was unable to enumerate one of more domains due to the following error. Enumeration will continue but the Active Directory identifier list may not be correct. Validate that all expected Active Directory identifiers are present by running Get-ADFSDirectoryProperties.

当 AD FS 尝试枚举受信任林链中的所有林并跨所有林进行连接时,会发生此事件。 例如,假定 AD FS 林 A 和林 B 受信任,并且信任林 B 和林 C。 AD FS 将枚举所有三个林,并尝试在林 A 和林 C 之间找到信任。如果来自失败林的用户应由 AD FS 进行身份验证,请设置 AD FS 林与失败林之间的信任。 如果来自失败林的用户不应通过 AD FS 进行身份验证,请忽略此事件。

我收到事件 ID 364。 我应该做些什么来解决此问题?

下面是事件的文本:

Microsoft.IdentityServer.AuthenticationFailedException: MSIS5015: Authentication of the presented token failed. Token Binding claim in token must match the binding provided by the channel.

在 AD FS 2016 中,令牌绑定会自动启用,并导致代理和联合方案出现多个已知问题。 这些问题会导致此事件。 若要解决该事件,请运行以下 PowerShell 命令以删除令牌绑定支持:

Set-AdfsProperties -IgnoreTokenBinding $true

我收到事件 ID 543。 如何缓解此事件?

下面是事件的文本:

System.ServiceModel.FaultException: The formatter threw an error while trying to deserialize the message: There was an error while trying to deserialize parameter schemas.microsoft.com/ws/2009/12/identityserver/protocols/policystore:maxBehaviorLevel". The InnerException message was "Invalid enum value 'Win2019' cannot be deserialized into type 'Microsoft.IdentityServer.FarmBehavior'. Ensure that the necessary enum values are present and are marked with EnumMemberAttribute attribute if the type has DataContractAttribute attribute.

当这两个语句均为 true 时,预期会出现此事件:

  • 你有一个混合模式场。
  • AD FS 2019 向主联合服务器提供场最大行为级别信息,并且联合服务器版本 2016 无法识别。

AD FS 2019 一直尝试在服务器场中共享 MaxBehaviorLevel 值 Win2019 ,直到两个月后过期,并自动从场中删除。 为了避免收到此事件,请将主要联合角色迁移到具有最新版本的联合服务器。 按照以下说明将 AD FS 场升级到 Windows Server 2019 场行为级别

如何解决 AD FS 管理员事件日志错误:“收到无效的 Oauth 请求。 <NAME> 客户端被禁止使用范围ug 访问资源“?

若要解决该问题,请执行以下步骤:

  1. 启动 AD FS 管理控制台。
  2. 转到 “服务>范围说明”。
  3. 在“范围说明”中,选择 “更多选项”,然后选择“ 添加范围说明”。
  4. “名称”下输入 ugs,然后选择“ 应用>确定”。
  5. 以管理员身份启动 PowerShell。
  6. 运行 Get-AdfsApplicationPermission 命令。 查找具有该值的ClientRoleIdentifier函数ScopeNames :{openid, aza}。 记下 ObjectIdentifier 值。
  7. 运行 Set-AdfsApplicationPermission -TargetIdentifier <ObjectIdentifier from step 5> -AddScope 'ugs' 命令。
  8. 重启 AD FS 服务。
  9. 在客户端上,重启客户端。 应提示你配置 Windows Hello 企业版。
  10. 如果配置窗口未弹出,则需要收集跟踪日志并进一步进行故障排除。

是否可以将资源值作为范围值的一部分传递,例如针对 Azure AD 的典型请求?

是,但仅在 Windows Server 2019 或更高版本中。 可以将范围参数组织为空格分隔的列表,其中每个条目的结构为资源或范围,例如 <create a valid sample request>

AD FS 是否支持 PKCE 扩展?

是,但仅在 Windows Server 2019 或更高版本中。 AD FS 支持 OAuth 授权代码授予流的代码交换(PKCE)证明密钥。

如何在通过 AD FS 注册的证书中获取安全标识符(SID)扩展,以满足在密钥分发中心(KDC)强制执行的强映射条件?

AD FS 根据某些 Windows Hello 企业版方案代表经过身份验证的帐户注册登录证书,如 使用 AD FS 为 Azure 虚拟桌面配置单一登录中所述。 默认情况下,这些证书不包含 SID 扩展,KDC 拒绝。 有关 KDC 要求的详细信息,请参阅 KB5014754:Windows 域控制器上基于证书的身份验证更改。 Windows Server 2019、Windows Server 2022 和 Windows Server 2025 上的 AD FS 提供更新,以确保颁发的证书包括 SID 扩展以满足强映射要求。 若要启用此行为,请在场的所有 AD FS 服务器上安装最新的 Windows 更新,并在主 AD FS 服务器上运行以下 cmdlet:

  • Set-AdfsCertificateAuthority -EnrollmentAgent -AddSIDCertificateExtension $true