本文介绍如何使用主领域发现(HRD)策略为联合用户配置Microsoft Entra身份验证行为。 它涉及使用自动加速登录来跳过用户名输入屏幕,并自动将用户转发到联合登录终结点。 若要详细了解 HRD 策略,请查看主领域发现一文。
先决条件
若要在 Microsoft Entra ID 中为应用程序配置 HRD 策略,需要:
- 具有活动订阅的Azure帐户。 如果还没有帐户,可以免费创建一个帐户。
- 应用程序管理员角色
自动加速登录
某些组织在其Microsoft Entra租户中配置域以与其他标识提供者(IDP)联合,例如Active Directory 联合身份验证服务(ADFS)进行用户身份验证。 当用户登录到应用程序时,他们首先会看到一个 Microsoft Entra 登录页。 键入其用户主体名称 (UPN) 后,如果他们位于联合域中,则会将其带到为该域提供服务的 IDP 的登录页。 某些情况下,当用户尝试登录特定应用程序时,管理员可能希望将其定向到登录页。 因此,用户可以跳过初始Microsoft Entra ID页。 这个过程称为“登录自动加速”。
对于使用云启用的凭据(例如短信服务 (SMS) 登录或 FIDO 密钥)的联合用户,应该阻止登录速度自动加快。 要了解如何使用 HRD 阻止域提示,请参阅禁用自动加速登录。
重要
从 2023 年 4 月开始,使用自动加速或智能链接的组织可能会开始看到有一个新屏幕添加到了登录 UI。 此屏幕称为“域确认对话框”,是Microsoft对安全强化的一般承诺的一部分,需要用户确认他们登录的租户的域。 如果看到域确认对话框但无法识别列出的租户域,则应取消身份验证流并联系 IT 管理员。
有关详细信息,请访问域确认对话框。
使用 Microsoft Graph PowerShell 设置 HRD 策略
我们使用 Microsoft Graph PowerShell cmdlet 来演练一些方案,包括:
- 在具有单个联合域的租户中,为应用程序设置 HRD 策略以实现自动加速。
- 针对已针对租户进行验证的多个域之一,为应用程序设置 HRD 策略以执行自动加速。
- 设置 HRD 策略,使旧应用程序能够对联合用户执行直接用户名/密码身份验证Microsoft Entra ID。
- 列出为其配置了策略的应用程序。
在以下示例中,将在Microsoft Entra ID中创建、更新、链接和删除应用程序服务主体上的 HRD 策略。
在开始之前,请运行 Connect 命令以至少具有 Application Administrator 角色登录到Microsoft Entra ID:
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -scopes "Policy.Read.All"运行以下命令,查看组织中的所有策略:
Get-MgPolicyHomeRealmDiscoveryPolicy -Property Id, displayName
如果未返回任何内容,则表示租户中未创建任何策略。
使用 Microsoft Graph PowerShell 创建 HRD 策略
在此示例中,您将创建一个策略,以便于将其分配给应用程序时,可以执行下列操作之一:
- 当租户中只有一个域时,在用户登录应用程序时,会自动将他们重定向到联合身份提供者的登录屏幕。
- 如果您的租户中包含多个联合域,用户将会被自动重定向到联合身份提供者的登录界面。
- 为策略分配的应用程序启用联合用户直接通过用户名/密码非交互式登录到 Microsoft Entra ID。
[!注意] 即使该策略未显式应用于任何服务主体,在 "AccelerateToFederatedDomain": true 策略中启用此项可能仍会阻止来宾用户登录。 在应用策略之前,请仔细查看此设置,以避免意外的访问问题。
当租户中只有单个域时,在用户登录应用程序时,以下策略会自动将用户重定向到联合身份提供者的登录界面。
运行 Connect 命令以至少使用 Application Administrator 角色登录到Microsoft Entra ID:
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -scopes "Policy.ReadWrite.ApplicationConfiguration"运行以下命令来创建新 HRD 策略:
# Define the parameters for the policy $params = @{ definition = @( '{"HomeRealmDiscoveryPolicy":{ "AccelerateToFederatedDomain":true, } }' ) displayName = "BasicAutoAccelerationPolicy" isOrganizationDefault = $true } # Create a new Home Realm Discovery Policy New-MgPolicyHomeRealmDiscoveryPolicy -BodyParameter $params
当租户中包含多个联合域时,以下策略会将用户自动加速到联合标识提供者登录屏幕。 如果有多个联合域对应用程序的用户进行身份验证,则需要指定要自动加速的域。
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -scopes "Policy.ReadWrite.ApplicationConfiguration"
# Define the parameters for the New-MgPolicyHomeRealmDiscoveryPolicy cmdlet
$params = @{
definition = @(
'{"HomeRealmDiscoveryPolicy":{
"AccelerateToFederatedDomain":true,
"PreferredDomain":"federated.example.edu"
}}'
)
displayName = "MultiDomainAutoAccelerationPolicy"
isOrganizationDefault = $true
}
# Create the new policy
New-MgPolicyHomeRealmDiscoveryPolicy -BodyParameter $params
以下策略为联合用户针对特定应用程序直接启用通过Microsoft Entra ID进行的用户名/密码身份验证。
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -scopes "Policy.ReadWrite.ApplicationConfiguration"
# Define the parameters for the New-MgPolicyHomeRealmDiscoveryPolicy cmdlet
$params = @{
definition = @(
'{"HomeRealmDiscoveryPolicy":{
"AllowCloudPasswordValidation":true
}
}'
)
displayName = "EnableDirectAuthPolicy"
}
New-MgPolicyHomeRealmDiscoveryPolicy -BodyParameter $params
若要查看新策略并获取其“ObjectID”,请运行以下命令:
Get-MgPolicyHomeRealmDiscoveryPolicy -Property Id, displayName
若要在创建 HRD 策略后启用该策略,可将它分配到多个服务主体。
使用 Microsoft Graph PowerShell 找到要分配策略的服务主体
需要获取要分配策略的服务主体的ObjectID。 可通过多种方法查找服务主体的“ObjectID”。
可以使用 Microsoft Entra 管理中心。 使用此选项:
- 浏览到 Entra ID>企业应用>所有应用程序。
- 在“搜索”框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。 复制应用程序的对象 ID。
由于使用的是 Microsoft Graph PowerShell,因此请运行以下 cmdlet 列出服务主体及其 ID。
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -scopes "Application.Read.All"
Get-MgServicePrincipal
使用 Microsoft Graph PowerShell 将策略分配给服务主体
在获取了要配置自动加速的应用程序的服务主体的“ObjectID”后,请运行以下命令。 该命令将创建的 HRD 策略与之前部分中找到的服务主体关联起来。
Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -scopes "Policy.ReadWrite.ApplicationConfiguration", "Application.ReadWrite.All"
# Define the parameters for the New-MgServicePrincipalHomeRealmDiscoveryPolicy cmdlet
$assignParams = @{
"@odata.id" = "https://microsoftgraph.chinacloudapi.cn/v1.0/policies/homeRealmDiscoveryPolicies/<policyId>"
}
New-MgServicePrincipalHomeRealmDiscoveryPolicyByRef -ServicePrincipalId $servicePrincipalId -BodyParameter $assignParams
可以为要向其添加策略的每个服务主体重复此命令。
如果已经为应用程序分配了 HomeRealmDiscovery 策略,则无法添加另一个策略。 在这种情况下,请更改分配到应用程序的 HRD 策略的定义,以添加其他参数。
使用 Microsoft Graph PowerShell 检查 HRD 策略分配到的服务主体
运行以下命令,列出向其分配了策略的服务主体:
Get-MgPolicyHomeRealmDiscoveryPolicyApplyTo -HomeRealmDiscoveryPolicyId "<ObjectId of the Policy>"
# Replace with the actual ObjectId of the Policy
确保测试应用程序的登录体验,以检查新策略是否正常工作。
使用 Microsoft Graph PowerShell 从应用程序中删除 HRD 策略
获取策略的 ObjectId。
使用前一个示例获取策略的ObjectID,以及您希望从中删除策略的应用程序服务主体的ObjectID。
从应用程序服务主体中删除策略分配。
Remove-MgServicePrincipalHomeRealmDiscoveryPolicyHomeRealmDiscoveryPolicyByRef -ServicePrincipalId $servicePrincipalId -HomeRealmDiscoveryPolicyId $homeRealmDiscoveryPolicyId通过列出向其分配了策略的服务主体检查删除情况。
Get-MgPolicyHomeRealmDiscoveryPolicyApplyTo -HomeRealmDiscoveryPolicyId "<ObjectId of the Policy>" # Replace with the actual ObjectId of the Policy
使用 Microsoft Graph PowerShell 删除 HRD 策略
要删除创建的 HRD 策略,请运行以下命令:
Remove-MgPolicyHomeRealmDiscoveryPolicy -HomeRealmDiscoveryPolicyId "<ObjectId of the Policy>" # Replace with the actual ObjectId of the Policy