了解 Microsoft Entra 架构

与所有目录类似,Microsoft Entra ID 中的对象是一种程序化的高级数据构造,可表示用户、组和联系人等。 在 Microsoft Entra ID 中新建用户或联系人的同时,你正在创建该对象的新实例。 可以根据实例的属性区分实例。

Microsoft Entra ID 中的属性是负责存储 Microsoft Entra ID 中对象实例的相关信息的元素。

Microsoft Entra 架构定义规则,规定了可在条目中使用的属性、这些属性可能具有的值类型,以及用户如何与这些值进行交互。

Microsoft Entra ID 有两种类型的属性:

  • 内置属性:由 Microsoft Entra 架构预定义的属性。 这些属性具有各种用途,可能可以访问,也可能不可以访问。
  • 目录扩展:提供的属性,确保可以自定义 Microsoft Entra ID 以供自己使用。 例如,如果你为本地 Active Directory 扩展了特定特性并且希望传递该特性,则可以使用提供的自定义属性之一。

每个云同步配置都包含一个同步架构。 此同步架构定义将同步哪些对象以及如何同步它们。

特性和表达式

将用户等对象预配到 Microsoft Entra ID 的同时,将创建用户对象的新实例。 该创建包括该对象的属性,又称为特性。 最初,新创建的对象的特性设为同步规则确定的值。 然后,这些特性通过云预配代理保持为最新。

Object provisioning

例如,用户可能是市场营销部门的成员。 其 Microsoft Entra 部门特性最初是在对其进行预配时创建的,且该值设为“营销”。 六个月后,如果用户调动到销售部门,则其本地 Active Directory 部门特性将更改为“销售”。 此更改同步到 Microsoft Entra ID,并反映在其 Microsoft Entra 用户对象中。

属性同步可能很直接,即 Microsoft Entra ID 中的值直接设为本地属性的值。 或者,程序化表达式可以处理同步。 需要一些逻辑或必须决定填充值时,需使用程序化表达式。

例如,如果电子邮件特性为“john.smith@contoso.com”,且需删除“@contoso.com”部分并仅传递值“john.smith”,则你应使用以下命令:

Replace([mail], "@contoso.com", , ,"", ,)

示例输入/输出:

  • 输入 (mail):“john.smith@contoso.com”
  • 输出:“john.smith”

若要详细了解如何编写自定义表达式和语法,请参阅在 Microsoft Entra ID 中编写特性映射的表达式

下表列出了一些常见的属性,以及如何将它们同步到 Microsoft Entra ID。

本地 Active Directory 映射类型 Microsoft Entra ID
cn 直接 CommonName
countryCode 直接 countryCode
displayName 直接 displayName
givenName Expression givenName
objectGUID 直接 sourceAnchorBinary
userPrincipalName 直接 userPrincipalName
proxyAddress 直接 ProxyAddress

查看同步架构

警告

云同步配置会创建服务主体。 服务主体在 Microsoft Entra 管理中心可见。 你不应按照 Microsoft Entra 管理中心中的服务主体体验来修改属性映射。 此操作不受支持。

若要查看云同步配置同步架构并对其进行验证,请执行以下步骤。

  1. 转到图形资源管理器

  2. 使用全局管理员帐户登录。

  3. 选择左侧的“修改权限”,并确保 Directory.ReadWrite.All 为“已同意” 。

  4. 运行查询 https://graph.microsoft.com/beta/serviceprincipals/?$filter=startswith(DisplayName, ‘{sync config name}’)。 该查询返回筛选的服务主体列表。 也可以通过 Microsoft Entra ID 下的应用注册节点来获得此项。

  5. 找到 "appDisplayName": "Active Directory to Azure Active Directory Provisioning",并记下 "id" 的值。

    "value": [
            {
                "id": "00d41b14-7958-45ad-9d75-d52fa29e02a1",
                "deletedDateTime": null,
                "accountEnabled": true,
                "appDisplayName": "Active Directory to Azure Active Directory Provisioning",
                "appId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
                "applicationTemplateId": null,
                "appOwnerOrganizationId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
                "appRoleAssignmentRequired": false,
                "displayName": "Active Directory to Azure Active Directory Provisioning",
                "errorUrl": null,
                "homepage": "https://account.activedirectory.windowsazure.com:444/applications/default.aspx?metadata=AD2AADProvisioning|ISV9.1|primary|z",
                "loginUrl": null,
                "logoutUrl": null,
                "notificationEmailAddresses": [],
                "preferredSingleSignOnMode": null,
                "preferredTokenSigningKeyEndDateTime": null,
                "preferredTokenSigningKeyThumbprint": null,
                "publisherName": "Active Directory Application Registry",
                "replyUrls": [],
                "samlMetadataUrl": null,
                "samlSingleSignOnSettings": null,
                "servicePrincipalNames": [
                    "http://adapplicationregistry.onmicrosoft.com/adprovisioningtoaad/primary",
                    "1a4721b3-e57f-4451-ae87-ef078703ec94"
                ],
                "signInAudience": "AzureADMultipleOrgs",
                "tags": [
                    "WindowsAzureActiveDirectoryIntegratedApp"
                ],
                "addIns": [],
                "api": {
                    "resourceSpecificApplicationPermissions": []
                },
                "appRoles": [
                    {
                        "allowedMemberTypes": [
                            "User"
                        ],
                        "description": "msiam_access",
                        "displayName": "msiam_access",
                        "id": "a0326856-1f51-4311-8ae7-a034d168eedf",
                        "isEnabled": true,
                        "origin": "Application",
                        "value": null
                    }
                ],
                "info": {
                    "termsOfServiceUrl": null,
                    "supportUrl": null,
                    "privacyStatementUrl": null,
                    "marketingUrl": null,
                    "logoUrl": null
                },
                "keyCredentials": [],
                "publishedPermissionScopes": [
                    {
                        "adminConsentDescription": "Allow the application to access Active Directory to Azure Active Directory Provisioning on behalf of the signed-in user.",
                        "adminConsentDisplayName": "Access Active Directory to Azure Active Directory Provisioning",
                        "id": "d40ed463-646c-4efe-bb3e-3fa7d0006688",
                        "isEnabled": true,
                        "type": "User",
                        "userConsentDescription": "Allow the application to access Active Directory to Azure Active Directory Provisioning on your behalf.",
                        "userConsentDisplayName": "Access Active Directory to Azure Active Directory Provisioning",
                        "value": "user_impersonation"
                    }
                ],
                "passwordCredentials": []
            },
    
  6. {Service Principal id} 替换为你的值,然后运行查询 https://graph.microsoft.com/beta/serviceprincipals/{Service Principal id}/synchronization/jobs/

  7. 找到 "id": "AD2AADProvisioning.fd1c9b9e8077402c8bc03a7186c8f976",并记下 "id" 的值。

    {
                "id": "AD2AADProvisioning.fd1c9b9e8077402c8bc03a7186c8f976",
                "templateId": "AD2AADProvisioning",
                "schedule": {
                    "expiration": null,
                    "interval": "PT2M",
                    "state": "Active"
                },
                "status": {
                    "countSuccessiveCompleteFailures": 0,
                    "escrowsPruned": false,
                    "code": "Active",
                    "lastSuccessfulExecutionWithExports": null,
                    "quarantine": null,
                    "steadyStateFirstAchievedTime": "2019-11-08T15:48:05.7360238Z",
                    "steadyStateLastAchievedTime": "2019-11-20T16:17:24.7957721Z",
                    "troubleshootingUrl": "",
                    "lastExecution": {
                        "activityIdentifier": "2dea06a7-2960-420d-931e-f6c807ebda24",
                        "countEntitled": 0,
                        "countEntitledForProvisioning": 0,
                        "countEscrowed": 15,
                        "countEscrowedRaw": 15,
                        "countExported": 0,
                        "countExports": 0,
                        "countImported": 0,
                        "countImportedDeltas": 0,
                        "countImportedReferenceDeltas": 0,
                        "state": "Succeeded",
                        "error": null,
                        "timeBegan": "2019-11-20T16:15:21.116098Z",
                        "timeEnded": "2019-11-20T16:17:24.7488681Z"
                    },
                    "lastSuccessfulExecution": {
                        "activityIdentifier": null,
                        "countEntitled": 0,
                        "countEntitledForProvisioning": 0,
                        "countEscrowed": 0,
                        "countEscrowedRaw": 0,
                        "countExported": 5,
                        "countExports": 0,
                        "countImported": 0,
                        "countImportedDeltas": 0,
                        "countImportedReferenceDeltas": 0,
                        "state": "Succeeded",
                        "error": null,
                        "timeBegan": "0001-01-01T00:00:00Z",
                        "timeEnded": "2019-11-20T14:09:46.8855027Z"
                    },
                    "progress": [],
                    "synchronizedEntryCountByType": [
                        {
                            "key": "group to Group",
                            "value": 33
                        },
                        {
                            "key": "user to User",
                            "value": 3
                        }
                    ]
                },
                "synchronizationJobSettings": [
                    {
                        "name": "Domain",
                        "value": "{\"DomainFQDN\":\"contoso.com\",\"DomainNetBios\":\"CONTOSO\",\"ForestFQDN\":\"contoso.com\",\"ForestNetBios\":\"CONTOSO\"}"
                    },
                    {
                        "name": "DomainFQDN",
                        "value": "contoso.com"
                    },
                    {
                        "name": "DomainNetBios",
                        "value": "CONTOSO"
                    },
                    {
                        "name": "ForestFQDN",
                        "value": "contoso.com"
                    },
                    {
                        "name": "ForestNetBios",
                        "value": "CONTOSO"
                    },
                    {
                        "name": "QuarantineTooManyDeletesThreshold",
                        "value": "500"
                    }
                ]
            }
    
  8. 运行查询 https://graph.microsoft.com/beta/serviceprincipals/{Service Principal Id}/synchronization/jobs/{AD2AAD Provisioning id}/schema

    {Service Principal Id}{AD2ADD Provisioning Id} 替换为自定义值。

  9. 此查询返回同步架构

    Returned schema

后续步骤