配置登录自动加速

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

先决条件

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

  • 具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户
  • 应用程序管理员角色

自动加速登录

某些组织在其 Microsoft Entra 租户中配置域,以便与 Active Directory 联合身份验证服务 (ADFS) 等其他标识提供者 (IDP) 联合进行用户身份验证。 当用户登录到应用程序时,首先会看到 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 策略。

  1. 在开始之前,请运行 Connect 命令,至少以应用程序管理员角色登录到 Microsoft Entra ID:

    connect-MgGraph -scopes "Policy.Read.All"
    
  2. 运行以下命令,查看组织中的所有策略:

    Get-MgPolicyHomeRealmDiscoveryPolicy -Property Id, displayName
    

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

使用 Microsoft Graph PowerShell 创建 HRD 策略

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

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

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

  1. 运行 Connect 命令,至少以应用程序管理员角色登录到 Microsoft Entra ID:

    connect-MgGraph -scopes "Policy.ReadWrite.ApplicationConfiguration"
    
    
  2. 运行以下命令以创建新的 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 -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 -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 管理中心。 使用此选项:

  1. 浏览到“标识”>“应用程序”>“企业应用程序”>“所有应用程序”
  2. 在搜索框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。 复制应用程序的对象 ID。

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

connect-MgGraph -scopes "Application.Read.All"
Get-MgServicePrincipal

使用 Microsoft Graph PowerShell 将策略分配给服务主体

在获取了要配置自动加速的应用程序的服务主体的“ObjectID”后,请运行以下命令。 此命令将创建的 HRD 策略与前面部分中的服务主体相关联。

    connect-MgGraph -scopes "Policy.ReadWrite.ApplicationConfiguration", "Application.ReadWrite.All"

# Define the parameters for the New-MgServicePrincipalHomeRealmDiscoveryPolicy cmdlet  
$assignParams = @{
	"@odata.id" = "https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies/<policyId>"
}

New-MgServicePrincipalHomeRealmDiscoveryPolicyByRef -ServicePrincipalId $servicePrincipalId -BodyParameter $assignParams

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

如果应用程序已分配了主领域发现策略,则无法添加第二个域。 在这种情况下,请更改分配到应用程序的 HRD 策略的定义,以添加其他参数。

使用 Microsoft Graph PowerShell 检查 HRD 策略分配到的服务主体

运行以下命令,列出为其分配策略的服务主体:

Get-MgPolicyHomeRealmDiscoveryPolicyApplyTo -HomeRealmDiscoveryPolicyId "<ObjectId of the Policy>"
 # Replace with the actual ObjectId of the Policy 

确保测试应用程序的登录体验,检查新策略是否正常工作。

使用 Microsoft Graph 设置 HRD 策略

我们使用 Microsoft Graph API 调用来探索一些场景,包括:

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

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

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

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

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

  1. 在开始之前,访问 Microsoft Graph 资源管理器窗口。

  2. 至少以应用程序管理员角色进行登录。

  3. 授予对 Policy.Read.All 权限的许可。

  4. 运行以下 API 调用以查看组织中的所有策略:

    GET https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies
    

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

使用 Microsoft Graph 创建 HRD 策略

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

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

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

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

  1. 至少以应用程序管理员角色进行登录。

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

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

    POST https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies  
    
    {  
        "definition": [  
            "{\"HomeRealmDiscoveryPolicy\":{\"AccelerateToFederatedDomain\":true}}"  
        ],  
        "displayName": "BasicAutoAccelerationPolicy",
        "isOrganizationDefault": true 
    } 
    

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

POST https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies  

{  
    "definition": [  
        "{\"HomeRealmDiscoveryPolicy\":{\"AccelerateToFederatedDomain\":true,\"PreferredDomain\":\"federated.example.edu\"}}"  
    ],  
    "displayName": "MultiDomainAutoAccelerationPolicy",
    "isOrganizationDefault": true 

}

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

POST https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies  

{  
    "definition": [  
        "{\"HomeRealmDiscoveryPolicy\":{\"AllowCloudPasswordValidation\":true}}"  
    ],  
    "displayName": "EnableDirectAuthPolicy"  
}  

若要查看新策略并获取其 ObjectID,请运行以下 API 调用:

    GET https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies

若要在创建 HRD 策略后应用该策略,可以将其分配给多个服务主体。

使用 Microsoft Graph 找到要分配策略的服务主体

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

可以使用 Microsoft Entra 管理中心。 使用此选项:

  1. 浏览到“标识”>“应用程序”>“企业应用程序”>“所有应用程序”

  2. 在搜索框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。 复制应用程序的对象 ID。

    因为你使用的是 Microsoft Graph 浏览器,请运行以下请求以列出服务主体及其标识符。

    GET https://graph.microsoft.com/v1.0/servicePrincipals  
    

使用 Microsoft Graph 将策略分配给服务主体

获得要为其配置自动加速的应用程序的服务主体的 ObjectID 后,请运行以下 API cal。此 API 调用将创建的 HRD 策略与前面部分中的服务主体相关联。

确保你同意 Application.ReadWrite.All 权限。

POST https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalId}/homeRealmDiscoveryPolicies/$ref  

{  
    "@odata.id": "https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies/{policyId}"  
}  

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

如果应用程序已分配了主领域发现策略,则无法添加第二个域。 在这种情况下,请更改分配到应用程序的 HRD 策略的定义,以添加其他参数。

使用 Microsoft Graph 检查您的 HRD 策略被分配到哪些服务主体

运行以下 API 调用,列出为其分配策略的服务主体:

GET https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies/{policyId}/appliesTo  

确保测试应用程序的登录体验,检查新策略是否正常工作。

使用 Microsoft Graph PowerShell 从应用程序中删除 HRD 策略

  1. 获取策略的 ObjectID。

    使用前面的示例获取策略的 ObjectID,以及要从中删除该策略的应用程序服务主体的 ObjectID

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

    Remove-MgServicePrincipalHomeRealmDiscoveryPolicyHomeRealmDiscoveryPolicyByRef -ServicePrincipalId $servicePrincipalId -HomeRealmDiscoveryPolicyId $homeRealmDiscoveryPolicyId
    
  3. 通过列出向其分配了策略的服务主体检查删除情况。

    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

使用 Microsoft Graph 从应用程序中删除 HRD 策略

  1. 获取策略的 ObjectID。

    使用前面的示例获取策略的 ObjectID,以及要从中删除该策略的应用程序服务主体的 ObjectID

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

    DELETE https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalId}/homeRealmDiscoveryPolicies/{policyId}/$ref
    
  3. 通过列出向其分配了策略的服务主体检查删除情况。

    GET https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies/<policyId>/appliesTo  
    

使用 Microsoft Graph 删除 HRD 策略

若要删除创建的 HRD 策略,请运行以下 API 调用:

DELETE https://graph.microsoft.com/v1.0/policies/homeRealmDiscoveryPolicies/{id}