使用 Microsoft Edge (Chromium) 进行 Kerberos 不受约束的双跃点身份验证

适用于: Internet 信息服务

简介

基于 Kerberos 身份验证协议设置 Windows 身份验证可能是一项复杂的工作,尤其是在处理诸如在 IIS 和 ASP.NET 上下文中将标识从前端站点委托到后端服务等方案时。 按照本文的步骤设置身份验证票证的委派,并通过 Microsoft Edge 版本 87 或更高版本等新式浏览器使用服务。

本文假定你正在设置类似于下图所示的体系结构:

显示基于 Kerberos 身份验证协议的 Windows 身份验证体系结构的关系图。

  • Workstation-Client1 计算机与主 Web-Server(称为 Primary-IIS-SRV)和后端 Web 服务器(称为 Backend-Web-SRV)同一 Active Directory 的一部分。
  • 计算机 Workstation-Client1 的用户将使用 Windows Active Directory 帐户登录到计算机。
  • 然后,他们将 (Microsoft Edge) 启动浏览器,导航到 Web-Server 上的网站(这是用于 Primary-IIS-SRV 的别名),并使用 Kerberos 通过集成Windows 身份验证进行身份验证。
  • 位于 Web-Server 上的网站将使用经过身份验证的用户凭据进行 HTTP 调用,API-Server (后端 Web-SRV) 使用 Kerberos 凭据委派代表用户检索应用程序数据的别名。

以下步骤将帮助你排查这种情况:设置适用于 Internet Explorer,但当用户采用 Microsoft Edge 时,他们不能再使用凭据委派功能。 若要使用 Kerberos 凭据委派,请参阅首先 排查 Internet Explorer 中的 Kerberos 故障

受约束或不受约束的委派

在上述方案中,这两种配置允许用户在通过前端 Web 服务器进行连接时,将计算机 Workstation-Client1 上的用户会话中的凭据委托给后端 API 服务器。

在不受约束的 Kerberos 委派配置中,应用程序池标识在 Web-Server 上运行,并在 Active Directory 中配置为受信任的委派任何服务。 在 Web-Server 上运行的应用程序池帐户可以将托管在该服务器上网站的经过身份验证的用户的凭据委托给 Active Directory 中的其他任何服务。 例如,SMTP 服务器、文件服务器、数据库服务器、另一个 Web 服务器等。这称为不受约束的委派,因为应用程序池帐户具有 (不受约束) 将凭据委托给它所联系的任何服务的权限。

在约束委派配置中,用作应用程序池标识的 Active Directory 帐户只能将经过身份验证的用户的凭据委托给已授权委派的服务列表。 如果驻留在名为 Web-Server 的服务器上的 Web 应用程序还必须联系数据库并代表用户进行身份验证,则必须将此服务主体名称 (SPN) 添加到授权服务列表中。

约束委派比基于最低特权原则的不受约束委派更安全。 应用程序被授予正常运行所需的权限,而不受约束的委派允许应用程序代表用户联系不应联系的资源。

如何知道在客户端上获取的要发送到 Web-Server 的 Kerberos 票证是否使用约束委派?

使用 Windows 中存在的 klist 命令工具列出来自客户端计算机的 Kerberos 票证缓存 (工作站客户端1) 。 查找名为 HTTP/<Web-Server> 名称的票证。 注意: <Web 服务器> 的名称是你希望通过 Kerberos 联系并进行身份验证的服务的 SPN。 票证还包含一些标志。 其中两个感兴趣: forwardableok_as_delegate

  • 第一个标志 forwardable指示 KDC (密钥分发中心) 可以根据需要使用新的网络掩码颁发新票证。 这允许用户登录到远程系统,并让远程系统代表用户获取新票证,以登录到另一个后端系统,就像用户已在本地登录到远程系统一样。

  • 第二个标志 ok_as_delegate 指示用户尝试进行身份验证的服务的服务帐户 (在上图中,托管 Web 应用程序) 的 IIS 应用程序池的应用程序池帐户对于不受约束的委派是受信任的。

如果这些服务使用不受约束的委派,则客户端计算机上的票证包含 ok_as_delegateforwardable 标志。 在大多数情况下,配置约束委派时,票证不包含 标志, ok_as_delegate 但包含 forwardable 标志。

为什么不受约束的委派在 Internet Explorer 中起作用,而不是在 Microsoft Edge 中工作?

尝试使用基于 Kerberos 的身份验证对网站进行身份验证时,浏览器会调用 Windows API 来设置身份验证上下文。 有问题的 API 为 InitializeSecurityContext。 此 API 可能会收到一系列标志,以指示浏览器是否允许 delegatable 用户收到的票证。 票证被标记为 delegatable ,因为用户尝试进行身份验证的服务有权以不受约束的方式委托凭据。 但是,这并不意味着尝试进行身份验证的应用程序 (在这种情况下,浏览器) 应使用此容量。

默认情况下,Internet Explorer 将标志传递给 InitializeSecurityContext,指示如果票证可以委托,则它应为 。 版本 87 及更高版本的 Microsoft Edge 不会仅因为票证标有标志而ok_as_delegate将标志传递给 InitializeSecurityContext 。 我们不建议在应用程序中使用不受约束的委派,因为它为应用程序提供了比所需权限更多的权限。 应用程序可以将用户的标识委托给域上的任何其他服务,并作为用户进行身份验证,而大多数使用凭据委派的应用程序不需要这一点。 应用程序应仅联系在设置约束委派时指定的列表中的服务。

默认情况下,Microsoft Edge 使用约束委派,其中在 Web-Server 上运行的 IIS 网站仅有权联系 API-Server 上托管的后端 API 站点,如下面列出的 Active Directory 中的应用程序池标识帐户配置所示:

应用程序池标识帐户配置的屏幕截图。

允许 Edge-Chromium 在 Active Directory 中使用不受约束的委派

出于兼容性目的,如果必须通过 Kerberos 使用不受约束的委派来维护应用程序,请启用 Microsoft Edge 以允许票证委派。 本文的以下部分详细介绍了以下步骤:

  1. Active Directory (中安装 组策略 Central Store 的管理模板(如果尚未) )。
  2. 安装 Microsoft Edge 管理模板
  3. 创建新的组策略对象
  4. 编辑组策略的配置,以便在对服务器进行身份验证时允许不受约束的委派
  5. (可选) 检查 Microsoft Edge 是否使用正确的委派标志

步骤 1:安装 Active Directory 的管理模板

  1. 从适用于 Windows Server 2019 ) 的管理模板 (.admx ) (下载模板。

  2. 下载安装程序并将内容提取到所选文件夹。 只需将其提取到包的默认指定位置,即 C:\Program Files (x86) \Microsoft 组策略\Windows 10 2018 年 10 月更新 (1809) v2\PolicyDefinitions

  3. 解压缩包后,在域控制器上找到 Sysvol 文件夹。 文件夹的路径为 C:\Windows\SYSVOL\sysvol\在 Sysvol 文件夹中,有一个文件夹,该文件夹的名称与此处示例中的 Active Directory 名称相同, (Oddessy.local) 。 从那里导航到 “策略” 文件夹。 如果不存在,请创建名为 “策略定义” 的文件夹,如下所示:

    策略文件夹下的策略定义文件夹的屏幕截图。

  4. 将从安装程序提取的 PolicyDefinitions 文件夹 (的内容复制到域控制器上的 sysvol 文件夹中的域中创建的 PolicyDefinitions 文件夹) 。

    注意

    安装程序提取的文件还包含本地化内容。 若要节省空间,请仅传输所需语言的本地化文件。 例如,名为 fr-FR 的文件夹包含所有法语本地化的内容。

  5. 传输完成后,验证模板在 Active Directory 中是否可用。 为此,请打开 Microsoft 管理控制台的“组策略管理”管理单元 (按 Windows+R,然后键入 gpmc.msc 以启动) 。 在组策略管理中,找到组策略对象并对其进行编辑。

    组策略管理编辑器中的组策略对象的屏幕截图。

    如上面的屏幕截图所示,在 “计算机配置” 节点下,是 “策略” 节点和 “管理模板” 节点。

步骤 2:安装 Microsoft Edge 管理模板

虽然域控制器上可能具有 策略管理模板 ,但你仍必须安装 Microsoft Edge Policy 文件才能访问旨在通过此浏览器启用双跃点不受约束委派的策略。 若要安装 Microsoft Edge Policy 文件,请执行以下步骤:

  1. 转到 Microsoft Edge 商业版下载站点

  2. 频道/ 版本下拉列表中选择要下载的版本。 建议使用最新的稳定版本。

  3. 从生成下拉列表中选择所需的 生成 ,最后从 平台 下拉列表中选择目标操作系统。 做出选择后,将显示另外两个按钮 (一个按钮,并显示一个链接) 。

    下载和部署 Microsoft Edge 商业版页面的屏幕截图。

  4. 单击“ 获取策略文件” 并接受许可协议以下载名为 MicrosoftEdgePolicyTemplates.cab的文件。 此文件包含 Microsoft Edge 的策略定义文件。

  5. 双击该文件,浏览同名) zip 存档 (内容。

  6. 将 zip 存档的内容提取到本地磁盘上的文件夹。 提取的内容将包含一个名为 Windows 的文件夹,你可以在其中找到名为 Admx 的子文件夹。 这将包含管理模板及其本地化版本 (应使用英语) 以外的语言。

    admx 文件夹的屏幕截图。

  7. 在上面的示例中,将 Sysvol 目录下的同一文件夹中的 .admx 文件传输到 (:C:\Windows\SYSVOL\sysvol\odessy.local\Policies\PolicyDefinitions) 。

  8. 打开 Active Directory 组策略 编辑器并选择现有的组策略对象进行编辑,以检查新传输的 Microsoft Edge 模板的存在。 这些文件夹将位于树视图中“管理模板”文件夹下的名为 Microsoft Edge 的文件夹中:

    组策略 Management 编辑器 中的 Microsoft Edge 项的屏幕截图。

步骤 3:创建新的组策略对象

下面介绍如何使用 Active Directory 组策略 Manager MMC 管理单元创建新的 组策略 对象:

  1. 按 Windows+R 键打开域控制器上的 “运行 ”菜单。
  2. 键入 Gpmc.msc 以打开 Microsoft 管理控制台并加载 Active Directory 组策略 Manager 管理单元。
  3. 在控制台的树视图中找到“组策略对象”节点,然后右键单击该节点以打开上下文菜单。
  4. 选择“ 新建 ”菜单项,填写要创建的组策略的名称,然后单击“ 确定”。

组策略管理编辑器中新菜单项的屏幕截图。

步骤 4:编辑组策略的配置,以便在对服务器进行身份验证时允许不受约束的委派

最后一步是启用策略,该策略允许 Microsoft Edge 浏览器在使用 Kerberos 对已启用 Windows 集成的网站执行身份验证时将标志InitializeSecurityContext传递给 ok_as_delegate API 调用。 如果不知道 Microsoft Edge 浏览器是否正在使用 Kerberos 对 (而不是 NTLM) 进行身份验证,请参阅 排查 Internet Explorer 中的 Kerberos 故障

在 Active Directory 组策略 编辑器中,选择将应用于 Active Directory 中的计算机的组策略对象,你打算允许最终用户通过 Kerberos 身份验证进行身份验证,并通过不受约束的委派将其凭据委托给后端服务。 将从 Microsoft Edge 启用不受约束委派的策略位于 Microsoft Edge 模板的 Http 身份验证文件夹下,如下所示:

组策略管理编辑器中的 H T T P 身份验证文件夹的屏幕截图。

使用此设置可以配置允许委派 Kerberos 票证的服务器列表。

注意

必须提供服务器列表。 在本文开头使用的示例中,必须向列表中添加 Web-Server 服务器名称,以允许前端 Web-Server Web 应用程序将凭据委托给后端 API-Server。

服务器列表的屏幕截图。

将新编辑的组策略对象应用于域内的客户端计算机后,请转到 Windows 集成身份验证故障排除的诊断页中的测试身份验证页 ,并从 GitHub 上的 ASP.net 示例存储库下载whoami.aspx 页。 它将生成 “委托”的 ImpersonationLevel 设置,而不是 “模拟” ,以指示现在允许委派凭据。

ImpersonationLevel 设置页的屏幕截图。

若要测试是否已在客户端工作站上正确应用策略,请打开新的 Microsoft Edge 选项卡并键入 edge://policy

edge://policy 页的屏幕截图。

策略 AuthNegotiateDelegateAllowlist 应设置为指示允许 Microsoft Edge 对其执行 Kerberos 票证委派的服务器名称的值。 如果该策略未显示在列表中,则表示该策略尚未部署或部署在错误的计算机上。

步骤 5 (可选) :检查 Microsoft Edge 是否使用正确的委派标志

下面是故障排除/可选检查步骤。

配置并部署策略后,必须执行以下步骤来验证 Microsoft Edge 是否将正确的委派标志传递给 IntializeSecurityContext。 这些步骤使用已内置于 Microsoft Edge 或以联机服务提供的工具。

  1. 使用 Microsoft Edge 中提供的日志记录功能来记录浏览器在请求网站时执行的操作。 若要启用日志记录,请执行以下操作:

    1. 打开新的 Microsoft Edge 窗口并键入 edge://net-export/

    2. 跟踪时使用 “包括 Cookie 和凭据” 选项。 如果没有此选项,将省略身份验证跟踪级别数据。

      edge://net-export/ 页的屏幕截图。

    3. 单击“ 开始记录到磁盘 ”按钮,并提供要保存跟踪的文件名。

    4. 打开另一个 Microsoft Edge 选项卡,导航到要使用 Microsoft Edge 执行集成Windows 身份验证的网站。

    5. 尝试进行身份验证后,请返回到启用了跟踪的上一个选项卡,然后单击“ 停止日志记录 ”按钮。 跟踪接口将指示包含跟踪的文件已写入到的位置。

  2. 使用包含跟踪的 JSON 文件查看尝试进行身份验证时浏览器传递给 InitializeSecurityContext 函数的参数。 若要分析跟踪,请使用 netlog_viewer

  3. 在分析的跟踪中,有一个类似于以下内容的事件日志:

    t=3076 [st=12]       +AUTH_LIBRARY_INIT_SEC_CTX  [dt=3]
                          --> flags = {"delegated":false,"mutual":false,"value":"0x00000000"}
                          --> spn = "HTTP/web-server.odessy.local"
    

    此日志显示:

    • AUTH_LIBRARY_INIT_SEC_CTX 表示浏览器正在调用 函数 InitializeSecurityContext
    • "delegated":false 意味着即使票证标记为 delegatable,也不应委托票证。
    • "mutual":false 表示客户端 (浏览器) 不需要服务器也向客户端进行身份验证并证明其身份。 只有客户端应向服务器进行身份验证,以证明其身份。
    • HTTP/web-server.odessy.local 是浏览器在进行身份验证调用时使用的 SPN。

更多信息

Windows 集成身份验证故障排除的诊断页