管理应用程序中的映射和与 Microsoft Entra ID 中用户不匹配的用户

将现有应用程序与 Microsoft Entra ID 集成以进行预配或单一登录 (SSO) 时,你可能确定应用程序数据存储中有用户与 Microsoft Entra ID 中的用户不对应,或者与 Microsoft Entra ID 中的任何用户都不匹配。

Microsoft Entra 预配服务依赖于可配置的匹配规则来确定 Microsoft Entra ID 中的用户是否对应于应用程序中的用户,从而在应用程序中搜索具有 Microsoft Entra ID 用户的匹配属性的用户。 例如,假设匹配规则是将 Microsoft Entra ID 用户的 userPrincipalName 属性与应用程序的 userName 属性进行比较。 将 Microsoft Entra ID 中 userPrincipalName 值为 alice.smith@contoso.com 的用户分配给应用程序角色时,Microsoft Entra 预配服务使用诸如 userName eq "alice.smith@contoso.com" 之类的查询来执行应用程序搜索。 如果应用程序搜索指示没有用户匹配,则 Microsoft Entra 预配服务会在应用程序中创建新用户。

如果应用程序还没有任何用户,则此过程会使用在 Microsoft Entra ID 中分配的用户来填充应用程序的数据存储。 但是,如果应用程序已有用户,则可能会出现两种情况。 第一种情况是,可能有人在应用程序中拥有用户帐户,但匹配无法找到他们 - 也许用户在应用程序中表示为 asmith@contoso.com 而不是 alice.smith@contoso.com,因此 Microsoft Entra 预配服务执行的搜索找不到他们。 在这种情况下,该人员可能最终在应用程序中具有重复用户帐户。 另一种情况是,可能有人在应用程序中拥有用户帐户,而在 Microsoft Entra ID 中没有。 在这种情况下,Microsoft Entra 预配服务不会与应用程序中的这些用户交互,但是,如果应用程序配置为依赖 Microsoft Entra ID 作为其唯一标识提供者,则这些用户将不再无法登录:应用程序将重定向此人使用 Microsoft Entra ID 登录,但此人在 Microsoft Entra ID 中没有用户身份。

Microsoft Entra ID 和现有应用程序的数据存储之间出现这些不一致可能是由于多种原因,包括:

  • 应用程序管理员直接在应用程序中创建用户(例如针对承包商或供应商),他们未在记录 HR 源系统中表示,但确实需要应用程序访问权限,
  • 标识和属性更改(例如人员改名)未发送到 Microsoft Entra ID 或应用程序,因此一个或另一个系统中的表示形式过期,或者
  • 组织使用的标识管理产品通过不同的社区独立预配了 Windows Server AD 和应用程序。 例如,存储员工需要应用程序访问权限,但不需要 Exchange 邮箱,因此未在 Windows Server AD 或 Microsoft Entra ID 中表示存储员工。

在对具有现有用户的应用程序启用预配或 SSO 之前,应进行检查以确保用户匹配,调查并解决应用程序中用户不匹配的问题。 本文概述了如何解决用户无法匹配的不同情况的选项。

确定应用程序中是否有不匹配的用户

如果已确定应用程序中与 Microsoft Entra ID 中的用户不匹配的用户列表,请继续下一部分。

确定应用程序中哪些用户与 Microsoft Entra ID 中的用户不匹配的过程取决于应用程序如何或将如何与 Microsoft Entra ID 集成。

  • 如果使用的是 SAP 云标识服务,请按照 SAP 云标识服务预配教程操作,直到完成确保现有 SAP 云标识服务用户具有必要匹配属性的步骤。 在该教程中,将用户列表从 SAP 云标识服务导出到 CSV 文件,然后使用 PowerShell 将这些用户与 Microsoft Entra ID 中的用户匹配。

  • 如果应用程序使用的是 LDAP 目录,请按照 LDAP 目录预配教程操作,直到完成从 LDAP 目录中收集现有用户的步骤。 在该教程中,使用 PowerShell 将这些用户与 Microsoft Entra ID 中的用户匹配。

  • 对于其他应用程序(包括具有 SQL 数据库或在应用程序库中具有预配支持的应用程序),请按照教程管理应用程序现有用户操作,直到完成确认 Microsoft Entra ID 具有与应用程序用户匹配的用户的步骤。

  • 对于没有预配界面的其他应用程序,请按照教程管理不支持预配的应用程序的用户操作,直到完成确认 Microsoft Entra ID 具有与应用程序用户匹配的用户的步骤。

当这些教程中提供的 PowerShell 脚本完成时,如果应用程序中的任何记录未位于 Microsoft Entra ID 中,则会显示错误。 如果应用程序数据存储中用户的所有记录并非都可以作为 Microsoft Entra ID 中的用户找到,则需要调查哪些记录不匹配以及原因,然后使用下一部分中的选项之一解决匹配问题。

确保应用程序与 Microsoft Entra ID 之间的用户匹配的选项

本部分提供了几个选项来解决应用程序中用户不匹配的问题。 根据组织的目标以及 Microsoft Entra ID 与应用程序之间的数据问题,为每个用户选择适当的选项。 可能没有一个单一选项可以涵盖特定应用程序中的所有用户。

选项 预配前所需的更新
从应用程序中删除测试用户 应用程序中的用户
从应用程序中删除不再属于组织的人员的用户身份 应用程序中的用户
从应用程序中删除用户并从 Microsoft Entra ID 中重新创建该用户 应用程序中的用户
更新应用程序中用户的匹配属性 应用程序中的用户
使用新属性更新应用程序中的用户 应用程序中的用户
当电子邮件地址与用户主体名称不匹配时更改匹配规则或属性 应用程序或 Microsoft Entra 应用程序匹配规则中的用户
更新 Microsoft Entra ID 中用户的匹配属性 Microsoft Entra ID 中的用户
更新 Microsoft Entra Connect 同步或云同步预配规则以同步必要的用户和属性 Microsoft Entra Connect 同步或 Microsoft Entra 云同步,这会更新 Microsoft Entra ID 中的用户
使用新属性更新 Microsoft Entra ID 中的用户 Microsoft Entra ID 中的用户
将匹配规则更改为已在 Microsoft Entra ID 中填充的其他属性 Microsoft Entra 应用程序匹配规则
在 Windows Server AD 中为应用程序中需要持续访问应用程序的用户创建用户 Windows Server AD 中的用户,这会更新用户 Microsoft Entra ID
在 Microsoft Entra ID 中为应用程序中需要持续访问应用程序的用户创建用户 Microsoft Entra ID 中的用户
在应用程序和 Microsoft Entra ID 中维护单独的不匹配用户

从应用程序中删除测试用户

应用程序中可能存在初始部署留下的测试用户。 如果存在不再需要的用户,可以将其从应用程序中删除。

从应用程序中删除不再属于组织的人员的用户身份

用户可能不再隶属于组织,并且不再需要访问应用程序,但仍然是应用程序数据源中的用户。 如果应用程序管理员未移除用户,或者没有被告知需要进行更改,则可能会发生这种情况。 如果不再需要用户,则可以将其从应用程序中删除。

从应用程序中删除用户并从 Microsoft Entra ID 中重新创建该用户

如果应用程序当前未广泛使用,或者不维护任何每用户状态,则另一个选项是从应用程序中删除用户,以便不再有任何不匹配的用户。 然后,当用户在 Microsoft Entra ID 中请求或被分配应用程序时,会向其预配访问权限。

更新应用程序中用户的匹配属性

应用程序和 Microsoft Entra ID 中可能存在用户,但应用程序中的用户要么缺少匹配所需的属性,要么该属性的值不正确。

例如,当 SAP 管理员使用其管理控制台在 SAP 云标识服务中创建用户时,该用户可能没有 userName 属性。 但是,该属性可能是用于与 Microsoft Entra ID 中的用户匹配的属性。 如果 userName 属性是用于匹配的属性,则需要 SAP 管理员更新这些现有的 SAP 云标识服务用户,以具有 userName 属性的值。

再举一个例子,首次将用户添加到应用程序时,应用程序管理员已将用户的电子邮件地址设置为应用程序中用户的 mail 属性。 但是,稍后此人的电子邮件地址和 userPrincipalName 在 Microsoft Entra ID 中发生更改。 但是,如果应用程序不需要电子邮件地址,或者电子邮件提供商具有允许旧电子邮件地址继续转发的重定向,则应用程序管理员可能未察觉到需要在应用程序的数据源中更新 mail 属性。 可以通过由应用程序管理员将应用程序用户的 mail 属性更改为当前值或通过更改匹配规则来解决此不一致问题,如以下部分所述。

使用新属性更新应用程序中的用户

组织以前的标识管理系统可能已将应用程序中的用户创建为本地用户。 如果组织当时没有单一标识提供者,则应用程序中的这些用户不需要与任何其他系统关联任何属性。 例如,以前的标识管理产品基于权威 HR 源在应用程序中创建了用户。 该标识管理系统维护了它在应用程序中创建的用户与 HR 源之间的关联,并且未向应用程序提供任何 HR 源标识符。 稍后,当尝试将应用程序连接到从同一 HR 源填充的 Microsoft Entra ID 租户时,Microsoft Entra ID 中可能具有应用程序中所有相同人员的用户身份,但由于没有共同属性,所有用户匹配都会失败。

要解决此匹配问题,请执行以下步骤。

  1. 选择应用程序中用户的现有未使用属性,或向应用程序中的用户架构添加新属性。
  2. 使用来自权威源(例如 Microsoft Entra ID 中用户已存在的员工 ID 号或电子邮件地址)的数据填充应用程序中所有用户的属性。
  3. 更新应用程序的 Microsoft Entra 应用程序预配属性映射配置,以便将此属性包含在匹配规则中。

当电子邮件地址与用户主体名称不匹配时更改匹配规则或属性

默认情况下,应用程序的某些 Microsoft Entra 预配服务映射会发送 userPrincipalName 属性,以便与应用程序电子邮件地址属性匹配。 某些组织的用户的主电子邮件地址与其用户主体名称不同。 如果应用程序将电子邮件地址存储为用户的一个属性,而不是 userPrincipalName,则需要更改应用程序中的用户或匹配规则。

  • 如果计划使用从 Microsoft Entra ID 到应用程序的单一登录,可能需要更改应用程序以添加一个用户属性来保存 userPrincipalName。 然后,使用 Microsoft Entra ID 中用户的 userPrincipalName 来填充应用程序中每个用户的该属性,并更新 Microsoft Entra 应用程序预配配置,以便将该属性包含在匹配规则中。
  • 如果不打算从 Microsoft Entra ID 使用单一登录,则另一种方法是更新 Microsoft Entra 应用程序预配属性映射配置,以匹配匹配规则中 Microsoft Entra 用户的电子邮件地址属性。

更新 Microsoft Entra ID 中用户的匹配属性

在某些情况下,在 Microsoft Entra ID 用户中,用于匹配的属性的值已过期。 例如,某人更改了姓名,但并未在 Microsoft Entra ID 用户中进行该姓名更改。

如果仅在 Microsoft Entra ID 中创建和维护了用户,则应更新用户以具有正确的属性。 如果用户属性源自上游系统(例如 Windows Server AD 或 HR 源),则需要更改上游源中的值,并等待更改在 Microsoft Entra ID 中可见。

更新 Microsoft Entra Connect 同步或云同步预配规则以同步必要的用户和属性

在某些情况下,以前的标识管理系统会为 Windows Server AD 用户填充一个适当的属性,该属性可作为另一个应用程序的匹配属性。 例如,如果以前的标识管理系统已连接到 HR 源,则 AD 用户的 employeeId 属性由该以前的标识管理系统使用用户的员工 ID 填充。 再举一个例子,之前的标识管理系统已将应用程序唯一用户 ID 作为扩展属性写入了 Windows Server AD 架构。 但是,如果没有选择将这些属性同步到 Microsoft Entra ID,或者用户不在同步到 Microsoft Entra ID 的范围内,则用户社区的 Microsoft Entra ID 表示形式可能不完整。

要解决此问题,需要更改 Microsoft Entra Connect 同步或 Microsoft Entra 云同步配置,以确保 Windows Server AD 中的所有相应用户(这些用户也存在于应用程序中)都在要预配到 Microsoft Entra ID 的范围内,并且这些用户的同步属性包括将用于匹配目的的属性。 如果使用的是 Microsoft Entra Connect 同步,请参阅 Microsoft Entra Connect 同步:配置筛选Microsoft Entra Connect 同步:目录扩展。 如果使用的是 Microsoft Entra 云同步,请参阅 Microsoft Entra 云同步中的属性映射云同步目录扩展和自定义属性映射

使用新属性更新 Microsoft Entra ID 中的用户

在某些情况下,应用程序可能会保存当前未存储在用户的 Microsoft Entra ID 架构中的用户的唯一标识符。 例如,如果使用 SAP 云标识服务,你可能希望将 SAP 用户 ID 作为匹配属性,或者如果使用 Linux 系统,则可能希望将 Linux 用户 ID 作为匹配属性。 但是,这些属性不是 Microsoft Entra ID 用户架构的一部分,因此可能对于 Microsoft Entra ID 中的任何用户都不存在。

要使用新属性进行匹配,请执行以下步骤。

  1. 选择 Microsoft Entra ID 中现有的未使用扩展属性,或使用新属性扩展 Microsoft Entra 用户架构。
  2. 使用来自权威源(例如应用程序或 HR 系统)的数据填充 Microsoft Entra ID 中所有用户的该属性。 如果用户是从 Windows Server AD 同步或从 HR 系统预配的,可能需要在该上游源中进行更改。
  3. 更新 Microsoft Entra 应用程序预配属性映射配置,并将此属性包含在匹配规则中。

将匹配规则更改为已在 Microsoft Entra ID 中填充的其他属性

应用程序库中的应用程序的默认匹配规则依赖于所有 Microsoft 客户中的所有 Microsoft Entra ID 用户普遍存在的属性,例如 userPrincipalName。 这些规则适用于常规用途测试或预配到当前没有用户的新应用程序中。 但是,许多组织可能已经使用与其组织相关的其他属性(例如员工 ID)填充了 Microsoft Entra ID 用户。 如果存在其他适合匹配的属性,请更新 Microsoft Entra 应用程序预配属性映射配置,并将此属性包含在匹配规则中。

配置从 HR 源到 Microsoft Entra ID 的入站预配

理想情况下,将用户独立预配到多个应用程序的组织应该依赖于从权威源(例如 HR 系统)派生的通用用户标识符。 许多 HR 系统都具有可以很好地充当标识符的属性,例如可以将 employeeId 视为是唯一的,这样就不会有两个人拥有相同的员工 ID。 如果有 HR 源(例如 Workday 或 SuccessFactors),那么从该源引入 employeeId 等属性通常可以制定合适的匹配规则。

要使用从权威源获取值的属性进行匹配,请执行以下步骤。

  1. 选择适当的 Microsoft Entra ID 用户架构属性,或使用新属性(其值对应于应用程序中用户的等效属性)扩展 Microsoft Entra 用户架构。
  2. 确保对于在 Microsoft Entra ID 和应用程序中拥有用户身份的所有人员,在 HR 源中也存在该属性。
  3. 配置从 HR 源到 Microsoft Entra ID 的入站配置。
  4. 等待使用新属性更新 Microsoft Entra ID 中的用户。
  5. 更新 Microsoft Entra 应用程序预配属性映射配置,并将此属性包含在匹配规则中。

在 Windows Server AD 中为应用程序中需要持续访问应用程序的用户创建用户

如果应用程序中的某些用户与权威 HR 源中的人员不对应,但将来需要访问基于 Windows Server AD 的应用程序和 Microsoft Entra ID 集成的应用程序,并且贵组织在使用 Microsoft Entra Connect 同步或 Microsoft Entra 云同步将用户从 Windows Server AD 预配到 Microsoft Entra ID,那么可以在 Windows Server AD 中为每个尚不存在的用户创建一个用户。

如果用户不需要访问基于 Windows Server AD 的应用程序,请在 Microsoft Entra ID 中创建用户,如下一部分所述。

在 Microsoft Entra ID 中为应用程序中需要持续访问应用程序的用户创建用户

如果应用程序中有用户与权威 HR 源中的人员不对应,但其需要持续访问 Microsoft Entra,并需要从 Microsoft Entra 中管理这些用户,则可以为其创建 Microsoft Entra 用户。 可以使用以下任一方法批量创建用户:

确保使用 Microsoft Entra ID 所需的属性填充这些新用户,以便稍后将其与应用程序中的现有用户以及 Microsoft Entra ID 所需的属性(包括 userPrincipalNamemailNicknamedisplayName)匹配。 userPrincipalName 对于目录中的所有用户必须是唯一的。

使用 PowerShell 批量创建用户

本部分介绍如何使用 Microsoft Graph PowerShell cmdlet 与 Microsoft Entra ID 交互。

组织首次将这些 cmdlet 用于此方案时,需要具有全局管理员角色才能允许将 Microsoft Graph PowerShell 用于租户。 后续交互可以使用权限较低的角色,例如用户管理员。

  1. 如果已有 PowerShell 会话,并在其中识别了在应用程序中但不在 Microsoft Entra ID 中的用户,则继续执行下面的步骤 6。 否则,打开 PowerShell。

  2. 如果尚未安装 Microsoft Graph PowerShell 模块,请使用以下命令安装 Microsoft.Graph.Users 模块和其他模块:

    Install-Module Microsoft.Graph
    

    如果已安装模块,请确保使用的是最新版本:

    Update-Module microsoft.graph.users,microsoft.graph.identity.governance,microsoft.graph.applications
    
  3. 连接到 Microsoft Entra ID:

    $msg = Connect-MgGraph -ContextScope Process -Scopes "User.ReadWrite.All"
    
  4. 如果这是第一次使用此命令,则需要同意允许 Microsoft Graph 命令行工具拥有这些权限。

  5. 将由应用程序中的用户组成的数组引入 PowerShell 环境,该数组中还包含作为 Microsoft Entra ID 所需属性的字段 - 用户主体名称、邮件别名和用户全名。 此脚本假定数组 $dbu_not_matched_list 包含应用程序中不匹配的用户。

    $filename = ".\Users-to-create.csv"
    $bu_not_matched_list = Import-Csv -Path $filename -Encoding UTF8
    
  6. 在 PowerShell 会话中指定要创建的用户数组中哪些列对应于 Microsoft Entra ID 所需的属性。 例如,数据库中可能有用户,其中,EMail 列中的值是要用作 Microsoft Entra 用户主体名称的值,Alias 列中的值包含 Microsoft Entra ID 邮件别名,Full name 列中的值包含用户的显示名称:

    $db_display_name_column_name = "Full name"
    $db_user_principal_name_column_name = "Email"
    $db_mail_nickname_column_name = "Alias"
    
  7. 在文本编辑器中打开以下脚本。 可能需要修改此脚本,以便添加应用程序所需的 Microsoft Entra 属性,或者在 $azuread_match_attr_name 不是 mailNicknameuserPrincipalName 时提供该 Microsoft Entra 属性。

    $dbu_missing_columns_list = @()
    $dbu_creation_failed_list = @()
    foreach ($dbu in $dbu_not_matched_list) {
       if (($null -ne $dbu.$db_display_name_column_name -and $dbu.$db_display_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_user_principal_name_column_name -and $dbu.$db_user_principal_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_mail_nickname_column_name -and $dbu.$db_mail_nickname_column_name.Length -gt 0)) {
          $params = @{
             accountEnabled = $false
             displayName = $dbu.$db_display_name_column_name
             mailNickname = $dbu.$db_mail_nickname_column_name
             userPrincipalName = $dbu.$db_user_principal_name_column_name
             passwordProfile = @{
               Password = -join (((48..90) + (96..122)) * 16 | Get-Random -Count 16 | % {[char]$_})
             }
          }
          try {
            New-MgUser -BodyParameter $params
          } catch { $dbu_creation_failed_list += $dbu; throw }
       } else {
          $dbu_missing_columns_list += $dbu
       }
    }
    
  8. 将生成的脚本从文本编辑器粘贴到 PowerShell 会话中。 如果出现任何错误,必须先进行更正,然后才能继续。

在应用程序和 Microsoft Entra ID 中维护单独的不匹配用户

应用程序数据源中可能有一个超级管理员用户,该用户与 Microsoft Entra ID 中的任何特定人员都不对应。 如果不为其创建 Microsoft Entra 用户,则无法从 Microsoft Entra ID 或 Microsoft Entra ID Governance 中管理这些用户。 由于这些用户无法使用 Microsoft Entra ID 登录,因此如果将应用程序配置为使用 Microsoft Entra ID 作为标识提供者,请确保这些用户不在使用 Microsoft Entra ID 进行身份验证的范围内。

重新导出用户

对 Microsoft Entra 用户、应用程序中的用户或 Microsoft Entra 应用程序匹配规则进行更新后,应重新导出并再次为应用程序执行匹配过程,以确保所有用户都相关。

  • 如果使用 SAP 云标识服务,请从确保现有 SAP 云标识服务用户具有必要匹配属性的步骤开始,按照 SAP 云标识服务预配教程操作。 在该教程中,将用户列表从 SAP 云标识服务导出到 CSV 文件,然后使用 PowerShell 将这些用户与 Microsoft Entra ID 中的用户匹配。

  • 如果应用程序使用的是 LDAP 目录,请从在 LDAP 目录中收集现有用户的步骤开始,按照 LDAP 目录预配教程操作。

  • 对于其他应用程序(包括具有 SQL 数据库或在应用程序库中具有预配支持的应用程序),请从在应用程序中收集现有用户的步骤开始,按照教程管理应用程序现有用户操作。

将用户分配到应用程序角色并启用预配

完成必要的更新并确认应用程序中的所有用户都与 Microsoft Entra ID 中的用户匹配后,应将 Microsoft Entra ID 中需要访问应用程序的用户分配到 Microsoft Entra 应用程序应用角色,然后启用对应用程序的预配。

  • 如果使用的是 SAP 云标识服务,请从确保现有 Microsoft Entra 用户拥有必要属性的步骤开始,继续按照 SAP 云标识服务预配教程操作。

后续步骤