声明中的目录扩展属性

目录扩展属性提供了一种在目录对象(如用户)上存储更多数据的方法。 仅用户对象上的扩展属性可用于向应用程序发出声明。 本文介绍如何在令牌声明中使用目录扩展属性将用户数据发送到应用程序。

注意

Microsoft Graph 提供三种可自定义 Graph 对象的其他扩展机制。 这些是扩展属性 1-15、开放扩展和架构扩展。 请参阅 Microsoft Graph 文档以了解详细信息。 使用开放和架构扩展存储在 Microsoft Graph 对象上的数据不能用作令牌中声明的源。

目录扩展属性始终与租户中的应用程序关联。 目录属性的名称包含应用程序名称中的 appId

目录扩展属性标识符的格式为 extension_xxxxxxxxx_AttributeName。 其中 xxxxxxxxx 是为其定义扩展的应用程序的 appId ,仅包含字符 0-9 和 A-Z。

注册和使用目录扩展

通过以下方式之一注册目录扩展属性:

使用来自 Microsoft Entra Connect 的数据发出声明

使用 Microsoft Entra Connect 创建和同步的目录扩展属性始终与 Microsoft Entra Connect 使用的应用程序 ID 相关联。 在门户中的企业应用程序配置中将这些属性配置为声明,从而将它们用作声明的源。 使用 AD Connect 创建目录扩展属性后,它将显示在 SAML SSO 声明配置中。

使用 Graph 或 PowerShell 发出声明

如果使用 Microsoft Graph 或 PowerShell 注册了目录扩展属性,可以配置应用程序在用户登录时接收该属性的数据。 可将应用程序配置为在目录扩展中接收数据,该扩展使用可选声明在应用程序上注册,该声明可在应用程序清单中设置。

然后,多租户应用程序可以注册目录扩展属性供自己使用。 将应用程序预配到租户中后,相关联的目录扩展可以在该租户中供用户进行使用。 目录扩展可用后,可使用它通过 Microsoft Graph 存储和检索数据。 目录扩展还可以映射到 Microsoft 标识平台发给应用程序的令牌中的声明。

如果应用程序需要发送声明,并包含来自在不同的应用程序上注册的扩展属性的数据,则必须使用声明映射策略将扩展属性映射到声明。

管理目录扩展属性的一种常见模式是注册一个应用程序,将其专门用于所需的所有目录扩展。 使用此类型的应用程序时,所有扩展的名称都具有相同的 appID。

例如,以下代码展示的声明映射策略从 OAuth/OIDC 令牌中的目录扩展属性发出单个声明:

{
    "ClaimsMappingPolicy": {
        "Version": 1,
        "IncludeBasicClaimSet": "false",
        "ClaimsSchema": [{
                "Source": "User",
                "ExtensionID": "extension_xxxxxxx_test",
                "JWTClaimType": "http://schemas.contoso.com/identity/claims/exampleclaim"
            },
        ]
    }
}

其中 xxxxxxx 是向其注册了扩展的应用程序的 appID(或客户端 ID)。

警告

为目录扩展属性定义声明映射策略时,请使用 ExtensionID 属性,而不是 ClaimsSchema 数组主体中的 ID 属性,如前例所示。

提示

在对象上设置目录扩展属性时,大小写一致非常重要。 扩展属性名称在设置时不区分大小写,但在令牌服务从目录读取它们时区分大小写。 如果在名称为“LegacyId”的用户对象和另一个名称为“legacyid”的用户对象上设置了扩展属性,则当使用名称“LegacyId”将属性映射到声明时,将成功检索数据,且声明将包含在第一位用户的令牌中,而不是第二位用户的令牌中。