与 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 和 MSOnline PowerShell 模块已弃用。 若要了解详细信息,请阅读有关弃用的更新。 在此日期之后,对这些模块的支持仅限于到 Microsoft Graph PowerShell SDK 的迁移帮助和安全性修复。 弃用的模块将持续运行至 2025 年 3 月 30 日。
我们建议迁移到 Microsoft Graph PowerShell,以便与 Microsoft Entra ID(以前称为 Azure AD)进行交互。 有关常见迁移问题,请参阅迁移常见问题解答。 注意:2024 年 6 月 30 日之后,MSOnline 版本 1.0.x 可能会遇到中断。
当添加多个顶级域时,会出现问题。 例如,假设已设置了 Microsoft Entra ID 和本地环境之间的联合。 本文档中使用的是域 bmcontoso.com。 现在,已添加了第二个顶级域 bmfabrikam.com。
当尝试将 bmfabrikam.com 域转换为联合域时,发生错误。 原因在于,Microsoft Entra ID 有一项限制,此限制不允许多个域的 IssuerUri 属性拥有相同的值。
SupportMultipleDomain 参数
若要避免此约束,需要添加一个不同的 IssuerUri,可以使用 -SupportMultipleDomain
参数来实现此目的。 此参数可配合以下 cmdlet 使用:
New-MsolFederatedDomain
Convert-MsolDomaintoFederated
Update-MsolFederatedDomain
此参数可让 Microsoft Entra ID 根据域名称设置 IssuerUri。 IssuerUri 在 Microsoft Entra ID 中的所有目录中将是唯一的。 使用参数可让 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>
对其进行转换,则会收到以下错误。
如果尝试添加 -SupportMultipleDomain
开关,会收到以下错误:
只是尝试针对原始域运行 Update-MsolFederatedDomain -DomainName <your domain> -SupportMultipleDomain
也会导致错误。
使用以下步骤来添加其他顶级域。 如果已添加了一个域并且未使用 -SupportMultipleDomain
参数,请从删除及更新原始域的步骤开始。 如果尚未添加顶级域,可以从使用 Microsoft Entra Connect 的 PowerShell 添加域的步骤开始。
请执行以下步骤来删除 Microsoft Online 信任,并更新原始域。
- 在 AD FS 联合服务器上,打开“AD FS 管理”。
- 展开左侧的“信任关系”和“信赖方信任”。
- 删除右侧的“Microsoft Office 365 标识平台”项。
- 在已安装 Azure AD PowerShell 模块的计算机上运行以下 PowerShell:
$cred=Get-Credential
。 - 输入要联合的 Microsoft Entra 域的混合标识管理员用户名和密码。
- 在 PowerShell 中,输入
Connect-MsolService -Credential $cred
。 - 在 PowerShell 中,输入
Update-MSOLFederatedDomain -DomainName <Federated Domain Name> -SupportMultipleDomain
。 此更新是针对原始域的。 因此,使用上述域后,命令将是:Update-MsolFederatedDomain -DomainName bmcontoso.com -SupportMultipleDomain
使用以下步骤通过 PowerShell 添加新的顶级域
- 在已安装 Azure AD PowerShell 模块的计算机上运行以下 PowerShell:
$cred=Get-Credential
。 - 输入要联合的 Microsoft Entra 域的混合标识管理员用户名和密码
- 在 PowerShell 中,输入
Connect-MsolService -Credential $cred
- 在 PowerShell 中,输入
New-MsolFederatedDomain –SupportMultipleDomain –DomainName
使用以下步骤通过 Microsoft Entra Connect 添加新的顶级域。
- 从桌面或开始菜单启动 Microsoft Entra Connect
- 选择“添加其他 Microsoft Entra 域”。
- 输入 Microsoft Entra ID 和 Active Directory 凭据
- 选择要配置联合的第二个域。
- 单击“安装”
验证新的顶级域
使用 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)。
请执行以下步骤添加自定义声明,以支持子域。
- 打开“AD FS 管理”
- 右键单击 Microsoft Online RP 信任,并选择“编辑声明规则”
- 选择第三个声明规则并替换
- 替换当前声明:
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/"));
- 单击“确定”。 单击“应用”。 单击“确定”。 关闭“AD FS 管理”。
后续步骤
安装 Microsoft Entra Connect 后,可以验证安装并分配许可证。
若要了解有关这些功能(在安装过程中已启用)的详细信息,请参阅自动升级、防止意外删除和 Microsoft Entra Connect Health。
若要了解有关这些常见主题的详细信息,请参阅计划程序以及如何触发同步。
详细了解如何将本地标识与 Microsoft Entra ID 集成。