与 Microsoft Entra ID 联合的多域支持

以下文档提供了有关与 Microsoft 365 或 Microsoft Entra 域联合时如何使用多个顶级域和子域的指导。

多个顶级域支持

若要让多个顶级域与 Microsoft Entra ID 联合,需要一些让单个顶级域联合时不需要的额外配置。

当域与 Microsoft Entra ID 联合时,系统在 Azure 中的域上设置几个属性。 其中一个重要属性是 IssuerUri。 此属性是 Microsoft Entra ID 用于标识与令牌关联的域的 URI。 该 URI 不需要解析为任何内容,但是它必须是有效的 URI。 默认情况下,Microsoft Entra ID 将该 URI 设置为本地 AD FS 配置中的联合身份验证服务标识符的值。

注意

联合身份验证服务标识符是可唯一标识联合身份验证服务的 URI。 联合身份验证服务是可充当安全令牌服务的 AD FS 实例。

可以使用 PowerShell 命令 Get-MsolDomainFederationSettings -DomainName <your domain> 查看 IssuerUri。

注意

我们计划在 2024 年 3 月 30 日弃用 Azure AD PowerShell。 若要了解详细信息,请阅读有关弃用的更新

我们建议迁移到 Microsoft Graph PowerShell,以便与 Microsoft Entra ID(以前称为 Azure AD)进行交互。 Microsoft Graph PowerShell 在 PowerShell 7 上提供,支持访问所有 Microsoft Graph API。 有关常见迁移查询的解答,请参阅迁移常见问题解答

当添加多个顶级域时,会出现问题。 例如,假设已设置了 Microsoft Entra ID 和本地环境之间的联合。 本文档中使用的是域 bmcontoso.com。 现在,已添加了第二个顶级域 bmfabrikam.com。

显示多个顶级域的屏幕截图

当尝试将 bmfabrikam.com 域转换为联合域时,发生错误。 原因在于,Microsoft Entra ID 有一项限制,此限制不允许多个域的 IssuerUri 属性拥有相同的值。

屏幕截图显示了 PowerShell 中的联合错误。

SupportMultipleDomain 参数

若要避免此约束,需要添加一个不同的 IssuerUri,可以使用 -SupportMultipleDomain 参数来实现此目的。 此参数可配合以下 cmdlet 使用:

  • New-MsolFederatedDomain
  • Convert-MsolDomaintoFederated
  • Update-MsolFederatedDomain

此参数可让 Microsoft Entra ID 根据域名称设置 IssuerUri。 IssuerUri 在 Microsoft Entra ID 中的所有目录中将是唯一的。 使用参数可让 PowerShell 命令成功完成。

此屏幕截图显示了 PowerShell 命令成功完成。

-SupportMultipleDomain 不会更改其他终结点,它们仍然配置为指向 adfs.bmcontoso.com 上的联合身份验证服务。

-SupportMultipleDomain 还可确保 AD FS 系统在颁发给 Microsoft Entra ID 的令牌中包含正确的颁发者值。 采用用户 UPN 的域部分并在 IssuerUri 中用它作为域来设置此值,即 https://{upn suffix}/adfs/services/trust

因此,在 Microsoft Entra ID 或 Microsoft 365 上进行身份验证期间,将使用用户令牌中的 IssuerUri 元素来查找 Microsoft Entra ID 中的域。 如果找不到匹配项,身份验证将会失败。

例如,如果用户的 UPN 是 bsimon@bmcontoso.com,则 AD FS 颁发者的令牌中的 IssuerUri 元素将设置为 http://bmcontoso.com/adfs/services/trust。 此元素将匹配 Microsoft Entra 配置,并且身份验证会成功。

以下自定义声明规则实现了此逻辑:

c:[Type == "http://schemas.xmlsoap.org/claims/UPN"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/issuerid", Value = regexreplace(c.Value, ".+@(?<domain>.+)", "http://${domain}/adfs/services/trust/"));

重要

若要在尝试添加新域或转换已有域时使用 -SupportMultipleDomain 开关,需要先设置联合信任才能支持它们。

如何更新 AD FS 与 Microsoft Entra ID 之间的信任

如果未设置 AD FS 与 Microsoft Entra ID 实例之间的联合信任,可能需要重新创建此信任。 原因是,当进行初始设置时未使用 -SupportMultipleDomain 参数时,会将 IssuerUri 设置为默认值。 在下面的屏幕截图中,可以看到 IssuerUri 设置为 https://adfs.bmcontoso.com/adfs/services/trust

如果已成功在 Microsoft Entra 管理中心添加了新域,然后尝试使用 Convert-MsolDomaintoFederated -DomainName <your domain> 对其进行转换,则会收到以下错误。

屏幕截图,显示在尝试使用“Convert-MsolDomaintoFederated”命令转换新域后在 PowerShell 中出现联合错误。

如果尝试添加 -SupportMultipleDomain 开关,会收到以下错误:

添加“-SupportMultipleDomain”开关后显示联合错误的屏幕截图。

只是尝试针对原始域运行 Update-MsolFederatedDomain -DomainName <your domain> -SupportMultipleDomain 也会导致错误。

联合错误

使用以下步骤来添加其他顶级域。 如果已添加了一个域并且未使用 -SupportMultipleDomain 参数,请从删除及更新原始域的步骤开始。 如果尚未添加顶级域,可以从使用 Microsoft Entra Connect 的 PowerShell 添加域的步骤开始。

请执行以下步骤来删除 Microsoft Online 信任,并更新原始域。

  1. 在 AD FS 联合服务器上,打开“AD FS 管理”
  2. 展开左侧的“信任关系”和“信赖方信任”
  3. 删除右侧的“Microsoft Office 365 标识平台”项。 删除 Microsoft Online
  4. 在已安装 Azure AD PowerShell 模块的计算机上运行以下 PowerShell:$cred=Get-Credential
  5. 输入要联合的 Microsoft Entra 域的混合标识管理员用户名和密码。
  6. 在 PowerShell 中,输入 Connect-MsolService -AzureEnvironment AzureChinaCloud -Credential $cred
  7. 在 PowerShell 中,输入 Update-MSOLFederatedDomain -DomainName <Federated Domain Name> -SupportMultipleDomain。 此更新是针对原始域的。 因此,使用上述域后,命令将是: Update-MsolFederatedDomain -DomainName bmcontoso.com -SupportMultipleDomain

使用以下步骤通过 PowerShell 添加新的顶级域

  1. 在已安装 Azure AD PowerShell 模块的计算机上运行以下 PowerShell:$cred=Get-Credential
  2. 输入要联合的 Microsoft Entra 域的混合标识管理员用户名和密码
  3. 在 PowerShell 中,输入 Connect-MsolService -AzureEnvironment AzureChinaCloud -Credential $cred
  4. 在 PowerShell 中,输入 New-MsolFederatedDomain -SupportMultipleDomain -DomainName

使用以下步骤通过 Microsoft Entra Connect 添加新的顶级域。

  1. 从桌面或开始菜单启动 Microsoft Entra Connect
  2. 选择“添加其他 Microsoft Entra 域”此屏幕截图显示了已选择“添加其他 Microsoft Entra 域”的“其他任务”页
  3. 输入 Microsoft Entra ID 和 Active Directory 凭据
  4. 选择要配置联合的第二个域。 添加其他 Microsoft Entra 域
  5. 单击“安装”

验证新的顶级域

使用 PowerShell 命令 Get-MsolDomainFederationSettings -DomainName <your domain>可以查看更新的 IssuerUri。 下面的屏幕截图显示原始域 http://bmcontoso.com/adfs/services/trust 上的联合设置已更新

新域上的 IssuerUri 已设置为 https://bmcontoso.com/adfs/services/trust

对子域的支持

添加子域时,因为 Microsoft Entra ID 处理域的方式,导致子域继承父项的设置。 因此,IssuerUri 需要与父项匹配。

例如,假设我有 bmcontoso.com,后来又添加了 corp.bmcontoso.com。 corp.bmcontoso.com 中用户的 IssuerUri 必须是 http://bmcontoso.com/adfs/services/trust。 但是,上面为 Microsoft Entra ID 实现的标准规则会生成颁发者的令牌 http://corp.bmcontoso.com/adfs/services/trust,该令牌与域所需的值不匹配,因此身份验证将会失败。

如何启用对子域的支持

若要避免此行为,需要更新 Microsoft Online 的 AD FS 信赖方信任。 为此,必须配置自定义声明规则,使其在构造自定义 Issuer 值时能够从用户的 UPN 后缀中删除任何子域。

使用以下声明:

c:[Type == "http://schemas.xmlsoap.org/claims/UPN"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/issuerid", Value = regexreplace(c.Value, "^.*@([^.]+\.)*?(?<domain>([^.]+\.?){2})$", "http://${domain}/adfs/services/trust/"));

[!注意]正则表达式中的最后一个数字设置根域中有多少个父域。 此处使用的是 bmcontoso.com,因此必须有两个父域。 如果保留三个父域(即 corp.bmcontoso.com),则该数字为 3。 最终可以指示一个范围,并且会以匹配方式来匹配最大域数。 “{2,3}”将匹配两到三个域(即 bmfabrikam.com 和 corp.bmcontoso.com)。

请执行以下步骤添加自定义声明,以支持子域。

  1. 打开“AD FS 管理”

  2. 右键单击 Microsoft Online RP 信任,并选择“编辑声明规则”

  3. 选择第三个声明规则并替换编辑声明

  4. 替换当前声明:

    c:[Type == "http://schemas.xmlsoap.org/claims/UPN"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/issuerid", Value = regexreplace(c.Value, ".+@(?<domain>.+)","http://${domain}/adfs/services/trust/"));
    

    替换为

    c:[Type == "http://schemas.xmlsoap.org/claims/UPN"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/issuerid", Value = regexreplace(c.Value, "^.*@([^.]+\.)*?(?<domain>([^.]+\.?){2})$", "http://${domain}/adfs/services/trust/"));
    

    替换声明

  5. 单击“确定”。 单击“应用”。 单击“确定”。 关闭“AD FS 管理”。

后续步骤

安装 Microsoft Entra Connect 后,可以验证安装并分配许可证

若要了解在安装过程中启用的这些功能,请参阅:自动升级防止意外删除

若要了解有关这些常见主题的详细信息,请参阅计划程序以及如何触发同步

详细了解如何将本地标识与 Microsoft Entra ID 集成