管理与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的集成方式。

  • 如果应用程序使用的是 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 Sync 或 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 Cloud Identity Services 中创建用户时,该用户可能没有 userName 属性。 但是,该属性可能是用于与Microsoft Entra ID用户匹配的属性。 userName如果属性是用于匹配的属性,则需要 SAP 管理员更新这些现有的 SAP Cloud Identity Services 用户,以将该userName属性的值分配给他们。

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

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

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

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

  1. 选择应用程序中用户的现有未使用属性,或向应用程序中的用户架构添加新属性。
  2. 使用来自权威源的数据(例如员工 ID 号码或电子邮件地址)为应用程序中所有用户的属性填充数据,此数据已存在于 Microsoft Entra 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 Sync:配置筛选Microsoft Entra Connect Sync:目录扩展。 如果您使用 Microsoft Entra 云同步,请参阅 Microsoft Entra Cloud Sync 中的属性映射云同步目录扩展和自定义属性映射

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

在某些情况下,应用程序可能会保留用户的唯一标识符,该标识符当前未存储在用户的Microsoft Entra ID架构中。 例如,如果使用 SAP Cloud Identity Services,则可能希望将 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 源,则引入来自该源的 employeeId 等属性通常可以制定合适的匹配规则。

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

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

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

如果应用程序中的用户与权威 HR 源中的人员不对应,但将来需要访问基于 AD 的Windows Server应用程序和Microsoft Entra ID集成的应用程序,并且组织正在使用 Microsoft Entra Connect Sync 或Microsoft Entra Cloud Sync 将用户从 Windows Server AD 预配到 Microsoft Entra ID,然后可以为尚未存在的每个用户在 Windows Server AD 中创建用户。

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

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

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

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

使用 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 -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -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 治理进行管理。 由于这些用户将无法使用Microsoft Entra ID登录,因此,如果将应用程序配置为使用Microsoft Entra ID作为标识提供者,请确保这些用户不在使用Microsoft Entra ID进行身份验证的范围内。

重新导出用户

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

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

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

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

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

后续步骤