使用应用代理将 Kerberos 约束委派用于单一登录(SSO)到您的应用程序

概述

可以为通过受集成Windows 身份验证保护的应用程序代理发布的本地应用程序提供单一登录。 这些应用程序需要 Kerberos 票证进行访问。 应用程序代理使用 Kerberos 约束委派(KCD)来支持这些应用程序。

若要详细了解单一登录(SSO),请参阅什么是单一登录?

可以通过在Active Directory中为专用网络连接器授予用户模拟权限,使用集成 Windows 身份验证(IWA)来为您的应用程序启用单点登录。 连接器使用此权限代表自身发送和接收令牌。

KCD 的单一登录的工作原理

此图说明了当用户尝试访问使用 IWA 的本地应用程序时流。

Microsoft Entra身份验证流关系图.

  1. 用户输入 URL 以通过应用程序代理访问本地应用程序。
  2. 应用程序代理将请求重定向到Microsoft Entra身份验证服务进行预身份验证。 此时,Microsoft Entra ID应用任何适用的身份验证和授权策略,例如多重身份验证。 如果验证用户,Microsoft Entra ID创建令牌并将其发送给用户。
  3. 用户将令牌传递给应用程序代理。
  4. 应用程序代理验证令牌并从中检索用户主体名称(UPN),然后连接器通过双重身份验证的安全通道拉取 UPN 和服务主体名称(SPN)。
  5. 连接器与本地 AD 进行 Kerberos 约束委派(KCD)协商,通过模拟用户身份来获取应用程序的 Kerberos 令牌。
  6. Active Directory将应用程序的 Kerberos 令牌发送到连接器。
  7. 连接器使用从 AD 收到的 Kerberos 令牌将原始请求发送到应用程序服务器。
  8. 应用程序将响应发送到连接器,该连接器随后返回到应用程序代理服务,最后返回给用户。

先决条件

在开始使用 IWA 应用程序的单一登录之前,请确保环境已准备好使用以下设置和配置:

  • 您的应用程序(如 SharePoint Web 应用程序)已设置为使用集成的 Windows 身份验证。 有关详细信息,请参阅启用对 Kerberos 身份验证的支持,或对于 SharePoint,请参阅SharePoint 2013 中 Kerberos 身份验证的计划
  • 所有应用都有 服务主体名称
  • 运行连接器的服务器和运行应用的服务器,均已加入域,属于同一域或信任域。 有关域加入的详细信息,请参阅 “将计算机加入域”。
  • 确保连接器服务器可以读取用户的TokenGroupsGlobalAndUniversal属性。 安全强化可能会限制此访问。 通过将连接器服务器添加到 Windows 授权访问组来启用它们。

配置Active Directory

Active Directory配置各不相同,具体取决于专用网络连接器和应用程序服务器是否位于同一域中。

同一域中的连接器和应用程序服务器

  1. 在 Active Directory 中,转到 Tools>Users and Computers

  2. 选择运行连接器的服务器。

  3. 右键单击并选择 “属性>委派”。

  4. 选择“仅信任此计算机来委派指定的服务”

  5. 选中“使用任意身份验证协议”。

  6. 此帐户可以向其提供委派凭据的服务下,为应用程序服务器的 SPN 标识添加值。 此设置使专用网络连接器能够针对列表中定义的应用程序模拟 AD 中的用户。

    显示“Connector-SVR 属性”窗口和“委派”选项卡的屏幕截图。

不同域中的连接器和应用程序服务器

  1. 有关跨域使用 KCD 的先决条件列表,请参阅 跨域的 Kerberos 约束委派

  2. 若要从应用程序代理(连接器)启用 Kerberos 身份验证委派,请使用 PrincipalsAllowedToDelegateTo Web 应用程序服务帐户的属性(webserviceaccount)。 应用程序服务器在运行下 webserviceaccount,委托服务器为 connectorcomputeraccount。 在与 webserviceaccount 相同的域中的域控制器(Windows Server 2012 R2 或更高版本)上运行以下命令。 将非 UPN 的平名用于这两个帐户。

    webserviceaccount如果为计算机帐户,请使用以下命令:

    $connector= Get-ADComputer -Identity connectorcomputeraccount -server dc.connectordomain.com
    
    Set-ADComputer -Identity webserviceaccount -PrincipalsAllowedToDelegateToAccount $connector
    
    Get-ADComputer webserviceaccount -Properties PrincipalsAllowedToDelegateToAccount
    

    webserviceaccount如果为用户帐户,请使用以下命令:

    $connector= Get-ADComputer -Identity connectorcomputeraccount -server dc.connectordomain.com
    
    Set-ADUser -Identity webserviceaccount -PrincipalsAllowedToDelegateToAccount $connector
    
    Get-ADUser webserviceaccount -Properties PrincipalsAllowedToDelegateToAccount
    

配置单一登录

  1. 根据通过应用程序代理发布应用程序中的说明发布应用程序。 请确保选择 Microsoft Entra ID 作为 预身份验证方法

  2. 应用程序显示在企业应用程序列表中后,选择它并选择 “单一登录”。

  3. 将单一登录模式设置为 Integrated Windows 身份验证

  4. 输入应用程序服务器的 内部应用程序SPN 。 在此示例中,已发布应用程序的 SPN 为 http/www.contoso.com. SPN 需要位于连接器可以向其提供委派凭据的服务列表中。

  5. 针对你要代表你的用户使用的连接器选择“委派的登录标识”。 有关详细信息,请参阅使用不同的本地标识和云标识

    显示集成Windows身份验证配置设置的屏幕截图。

非Windows应用的 SSO

Microsoft Entra ID 在云中对用户进行身份验证时,会启动 Microsoft Entra 应用程序代理中的 Kerberos 委派流。 请求在本地到达后,Microsoft Entra专用网络连接器通过与本地Active Directory交互代表用户颁发 Kerberos 票证。 此过程称为 Kerberos 约束委派(KCD)。

在下一阶段,使用此 Kerberos 票证将请求发送到后端应用程序。

有多种机制定义如何在此类请求中发送 Kerberos 票证。 大多数非Windows服务器都希望以 SPNEGO 令牌的形式接收它。 此机制在Microsoft Entra应用程序代理中受支持,但默认处于禁用状态。 可以为 SPNEGO 或标准 Kerberos 令牌配置连接器,但不能同时配置连接器。

如果为 SPNEGO 配置连接器计算机,请确保该连接器组中的所有其他连接器也配置了 SPNEGO。 需要标准 Kerberos 令牌的应用程序应通过未为 SPNEGO 配置的其他连接器进行路由。 某些 Web 应用程序接受这两种格式,而无需在配置中进行任何更改。

若要启用 SPNEGO,请执行以下作:

  1. 打开以管理员身份运行的命令提示符。

  2. 在需要 SPNEGO 的连接器服务器上运行以下命令。

    REG ADD "HKLM\SOFTWARE\Microsoft\Microsoft Entra private network connector" /v UseSpnegoAuthentication /t REG_DWORD /d 1
    net stop WAPCSvc & net start WAPCSvc
    

非Windows应用通常使用用户名或 SAM 帐户名称,而不是域电子邮件地址。 如果这种情况适用于应用程序,则需要配置委托的登录标识字段,将云标识连接到应用程序标识。

使用不同的本地和云标识

应用程序代理假定用户在云和本地具有相同的标识。 但是,由于公司策略或应用程序要求,某些组织需要使用备用 ID 进行登录。 仍可以通过为每个应用程序配置 委派登录标识 来启用 KCD 进行单一登录。 此设置指定要用于单一登录的标识。

此功能允许组织启用从云到本地应用的 SSO,而无需用户管理不同的用户名和密码。 常见方案包括:

  • 将多个内部域(例如,joe@us.contoso.com、joe@eu.contoso.com)与单个云域(例如,joe@contoso.com)一起使用。
  • 具有不可路由的内部域名(例如 joe@contoso.usa),同时在云中使用有效域名。
  • 在没有内部域名(例如 joe)的情况下运行。
  • 为本地和云中的用户分配不同的别名(例如, joe-johns@contoso.com 与) joej@contoso.com。

使用应用代理时,您可以选择用于获取 Kerberos 票证的身份。 此设置按应用程序配置,并支持需要无邮件格式或替代登录方法的系统。

显示“委派登录标识”下拉列表选项的屏幕截图。

如果使用委托的登录标识,则该值在组织中所有域或目录林中可能不是唯一的。 可以通过使用两个不同的连接器组两次发布这些应用程序来避免此问题。 由于每个应用程序具有不同的用户受众,因此你可以将其连接器加入不同的域。

如果 本地 SAM 帐户名称 用于登录标识,则必须将托管连接器的计算机添加到用户帐户所在的域中。

为不同的身份配置 SSO

  1. 配置Microsoft Entra连接设置,以便主标识是电子邮件地址(邮件)。 通过在同步设置中更改 “用户主体名称” 字段,在自定义过程中完成配置。 这些设置还确定用户如何登录到Microsoft 365、Windows计算机和其他使用Microsoft Entra ID作为其标识存储的应用程序。
    用于标识用户的用户主体名称下拉列表。

  2. 在要修改的应用程序的应用程序配置设置中,选择要使用的 委派登录标识

    • 用户主体名称(例如 joe@contoso.com
    • 备用用户主体名称(例如 joed@contoso.local
    • 用户主体名称的用户名部分(例如) joe
    • 备用用户主体名称 (Alternate User Principal Name) 中的用户名部分(例如 joed
    • 本地 SAM 帐户名称(取决于域控制器配置)

排查不同身份标识的 SSO 问题

如果后端应用程序响应意外的 HTTP 回复,请在连接器计算机上的应用程序代理会话事件日志中检查事件 24029,开始进行故障排除。 事件详细信息中的 user 字段显示用于委派的标识。 若要启用会话日志,请转到事件查看器,打开 View 菜单,然后选择 show 分析和调试日志

后续步骤