使用主领域发现配置登录行为

本文介绍了如何使用主页领域发现 (HRD) 策略为联合用户配置 Microsoft Entra 身份验证行为。 它涉及使用自动加速登录来跳过用户名输入屏幕,并自动将用户转发到联合登录终结点。 若要详细了解 HRD 策略,请查看主领域发现一文。

自动加速登录

某些组织在其 Microsoft Entra 租户中配置域,以便与 Active Directory 联合身份验证服务 (ADFS) 等其他标识提供者 (IDP) 联合进行用户身份验证。 当用户登录到应用程序时,首先会看到 Microsoft Entra 登录页。 键入其用户主体名称 (UPN) 后,如果他们位于联合域中,则会将其带到为该域提供服务的 IDP 的登录页。 某些情况下,当用户尝试登录特定应用程序时,管理员可能希望将其定向到登录页。 因此,用户可以跳过初始 Microsoft Entra ID 页。 这个过程称为“登录自动加速”。

对于具有启用云的凭据(如短信登录或 FIDO 密钥)的联合用户,应阻止登录自动加速。 要了解如何使用 HRD 阻止域提示,请参阅禁用自动加速登录

重要

从 2023 年 4 月开始,使用自动加速或智能链接的组织可能会开始看到有一个新屏幕添加到了登录 UI。 此屏幕称为“域确认对话框”,是 Microsoft 安全强化一般承诺的一部分,需要用户确认他们登录的租户的域。 如果看到域确认对话框但无法识别列出的租户域,则应取消身份验证流并联系 IT 管理员。

有关详细信息,请访问域确认对话框

先决条件

若要为 Microsoft Entra ID 中的应用程序配置 HRD 策略,你需要:

  • 具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户
  • 以下角色之一:全局管理员或服务主体的所有者。
  • 最新的 Azure AD PowerShell cmdlet 预览版。

设置应用程序的 HRD 策略

将使用 Azure AD PowerShell cmdlets 浏览几种方案,包括:

我们将使用 Microsoft Graph 来演练几个方案,其中包括:

  • 在包含单个联合域的租户中为应用程序设置 HRD 策略来执行自动加速。

  • 针对已针对租户进行验证的多个域之一,为应用程序设置 HRD 策略以执行自动加速。

  • 设置 HRD 策略,使旧式应用程序能够在 Microsoft Entra ID 中对联合用户执行直接的用户名/密码身份验证。

  • 列出为其配置了策略的应用程序。

以下示例在 Microsoft Entra ID 中的应用程序服务主体上创建、更新、链接、删除 HRD 策略。

注意

自 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 可能会遇到中断。

  1. 在开始之前,请运行 Connect 命令,以使用管理员帐户登录到 Microsoft Entra ID:

    Connect-AzureAD -Confirm
    
  2. 运行以下命令,查看组织中的所有策略:

    Get-AzureADPolicy
    

如果未返回任何内容,则表示租户中未创建任何策略。

创建 HRD 策略

在此示例中,将创建一个策略,以便将策略分配给应用程序时,可以执行以下任一操作:

  • 当租户中包含单个域时,请在用户登录到应用程序期间将用户自动加速到联合标识提供者登录屏幕。
  • 将用户自动加速到联合标识提供者登录屏幕,前提是租户中包含多个联合域。
  • 使策略分配到的应用程序的联合用户能够使用用户名/密码以非交互方式直接登录到 Microsoft Entra ID。

当租户中包含单个域时,在用户登录到应用程序期间,以下策略会将用户自动加速到联合标识提供者登录屏幕。

New-AzureADPolicy 
    -Definition @("{`"HomeRealmDiscoveryPolicy`":{`"AccelerateToFederatedDomain`":true}}") -DisplayName BasicAutoAccelerationPolicy 
    -Type HomeRealmDiscoveryPolicy
POST /policies/homeRealmDiscoveryPolicies

"HomeRealmDiscoveryPolicy": {
    "AccelerateToFederatedDomain": true
}

当租户中包含多个联合域时,以下策略会将用户自动加速到联合标识提供者登录屏幕。 如果有多个联合域对应用程序的用户进行身份验证,则需要指定要自动加速的域。

New-AzureADPolicy 
    -Definition @("{`"HomeRealmDiscoveryPolicy`":{`"AccelerateToFederatedDomain`":true, `"PreferredDomain`":`"federated.example.edu`"}}") 
    -DisplayName MultiDomainAutoAccelerationPolicy 
    -Type HomeRealmDiscoveryPolicy
POST /policies/homeRealmDiscoveryPolicies

"HomeRealmDiscoveryPolicy": {
    "AccelerateToFederatedDomain": true,
    "PreferredDomain": [
      "federated.example.edu"
    ]
}

以下策略使特定应用程序的联合用户能够直接在 Microsoft Entra ID 中使用用户名/密码进行身份验证:

New-AzureADPolicy 
    -Definition @("{`"HomeRealmDiscoveryPolicy`":{`"AllowCloudPasswordValidation`":true}}") 
    -DisplayName EnableDirectAuthPolicy 
    -Type HomeRealmDiscoveryPolicy
POST /policies/homeRealmDiscoveryPolicies

"EnableDirectAuthPolicy": {
    "AllowCloudPasswordValidation": true
}

若要查看新策略并获取其“ObjectID”,请运行以下命令:

Get-AzureADPolicy

若要在创建 HRD 策略后启用该策略,可将它分配到多个应用程序服务主体。

找到要分配给策略的服务主体

需要要向其分配策略的服务主体的“ObjectID”。 可通过多种方法查找服务主体的“ObjectID”

可以使用 Microsoft Entra 管理中心,也可以查询 Microsoft Graph。 还可以转到 Graph 浏览器工具,并登录到 Microsoft Entra 帐户,查看组织的所有服务主体。

由于使用的是 PowerShell,因此可以运行下面的 cmdlet 来列出服务主体及其 ID。

Get-AzureADServicePrincipal

向服务主体分配策略

在获取了要配置自动加速的应用程序的服务主体的“ObjectID”后,请运行以下命令。 该命令将步骤 1 中创建的 HRD 策略与步骤 2 中找到的服务主体关联起来。

Add-AzureADServicePrincipalPolicy 
    -Id <ObjectID of the Service Principal> 
    -RefObjectId <ObjectId of the Policy>

可以为要向其添加策略的每个服务主体重复此命令。

如果已经为应用程序分配了 HomeRealmDiscovery 策略,则无法添加另一个策略。 在这种情况下,请更改分配到应用程序的 HRD 策略的定义,以添加其他参数。

检查 HRD 策略分配到的服务主体

若要检查为其配置了 HRD 策略的应用程序,请使用 Get-AzureADPolicyAppliedObject cmdlet。 并向其传递要检查的策略的“ObjectID”

Get-AzureADPolicyAppliedObject -id <ObjectId of the Policy>

尝试运行应用程序,以检查新策略是否有效。

列出为其配置了 HRD 策略的应用程序

  1. 列出在组织中创建的所有策略

    Get-AzureADPolicy
    

记下要列出其分配情况的策略的“ObjectID”

  1. 列出向其分配了策略的服务主体

    Get-AzureADPolicyAppliedObject -id <ObjectId of the Policy>
    

从应用程序中删除 HRD 策略

  1. 获取 ObjectID

    使用前一个示例获取策略的“ObjectID”,以及希望从中删除策略的应用程序服务主体的“ObjectID”

  2. 从应用程序服务主体中删除策略分配

    Remove-AzureADServicePrincipalPolicy -id <ObjectId of the Service Principal>  -PolicyId <ObjectId of the policy>
    
  3. 通过列出向其分配了策略的服务主体检查删除情况

    Get-AzureADPolicyAppliedObject -id <ObjectId of the Policy>
    

通过 Graph 浏览器配置策略

在 Microsoft Graph 资源管理器窗口中:

  1. 使用先决条件部分中列出的角色之一登录。

  2. 授予对 Policy.ReadWrite.ApplicationConfiguration 权限的许可。

  3. 使用主领域发现策略创建新策略。

  4. POST 新政策,或 PATCH 更新现有政策。

    PATCH /policies/homeRealmDiscoveryPolicies/{id}
        {
            "definition": [
            "{\"HomeRealmDiscoveryPolicy\":
            {\"AccelerateToFederatedDomain\":true,
            \"PreferredDomain\":\"federated.example.edu\",
            \"AlternateIdLogin\":{\"Enabled\":true}}}"
        ],
            "displayName": "Home Realm Discovery auto acceleration",
            "isOrganizationDefault": true
        }
    
  5. 要查看你的新策略,请运行以下查询:

    GET /policies/homeRealmDiscoveryPolicies/{id}
    
  6. 若要将新策略分配给应用程序,请执行以下操作:

    POST /servicePrincipals/{id}/homeRealmDiscoveryPolicies/$ref
    

    或者,

    POST /servicePrincipals(appId='{appId}')/homeRealmDiscoveryPolicies/$ref
    
  7. 列出向其分配了策略的服务主体

    GET /policies/homeRealmDiscoveryPolicies/{ObjectId of the policy}/appliesTo
    
  8. 要删除创建的 HRD 策略,请运行查询:

    DELETE /policies/homeRealmDiscoveryPolicies/{id}
    
  9. 从服务主体中删除策略分配

    DELETE /servicePrincipals/{id}/homeRealmDiscoveryPolicies/{policyId}/$ref
    

    或者,

    DELETE /servicePrincipals(appId='{appId}')/homeRealmDiscoveryPolicies/{policyId}/$ref
    
  10. 通过列出向其分配了策略的服务主体检查删除情况

    GET /policies/homeRealmDiscoveryPolicies/{ObjectId of the policy}/appliesTo
    

后续步骤