使用图形 API 目录架构 API 创建时未显示 B2C 自定义属性

G M*_*Mac 5 azure azure-active-directory azure-ad-graph-api azure-ad-b2c

使用此处记录的扩展 API:

https://msdn.microsoft.com/en-us/library/azure/ad/graph/howto/azure-ad-graph-api-directory-schema-extensions

结合 B2C Graph Client 示例:

https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

我通过 AD Graph API 使用此 API 为目录架构扩展创建了一个自定义属性:

POST 
https://graph.windows.net/contoso.onmicrosoft.com/applications/<applicationObjectId>/extensionProperties?api-version=1.6
{
    name: "OrgRoleId",
    dataType: "String",
    targetObjects: [
        "User"
    ]
}
Run Code Online (Sandbox Code Playgroud)

(注意我将 API 版本更改为 1.6)。

API 创建的自定义属性使用 B2CGraphClient 示例显示,并且具有与通过 Azure 门户注册的 B2C 相同的数据。

但是,这些 API 创建的自定义属性不会出现在租户的 Azure 门户“用户属性”边栏选项卡中,而通过 Azure 门户为 B2C 租户创建的自定义属性会出现。

请注意,我可以为用户成功读取和写入这些扩展值(通过 Graph API)。我只是无法将它们放入声明中,因为它们不会出现在“用户属性”边栏选项卡上,也不会出现在 Azure 门户中的策略声明边栏选项卡上,因此它们不会作为声明添加到令牌中。

我错过了什么/做错了什么?

从 输出B2C.exe Get-extension-attribute <b2c-extensions-app objectId>*_Test1出现(创建门户),而*_UserRoleId没有出现(创建API):

{
  "odata.metadata": "https://graph.windows.net/<tenant_id>/$metadata#directoryObjects/Microsoft.DirectoryServices.ExtensionProperty",
  "value": [
    {
      "odata.type": "Microsoft.DirectoryServices.ExtensionProperty",
      "objectType": "ExtensionProperty",
      "objectId": "f58bc813-632c-486b-bff1-61695eeab691",
      "deletionTimestamp": null,
      "appDisplayName": "",
      "name": "extension_<object_id>_Test1",
      "dataType": "String",
      "isSyncedFromOnPremises": false,
      "targetObjects": [
        "User"
      ]
    },
    {
      "odata.type": "Microsoft.DirectoryServices.ExtensionProperty",
      "objectType": "ExtensionProperty",
      "objectId": "5e69b2d9-1ab0-463f-a231-5c188e92b4a1",
      "deletionTimestamp": null,
      "appDisplayName": "",
      "name": "extension_<object_id>_UserRoleId",
      "dataType": "String",
      "isSyncedFromOnPremises": false,
      "targetObjects": [
        "User"
      ]
    }
    ...
Run Code Online (Sandbox Code Playgroud)

Ome*_*bal 1

当您通过门户添加扩展属性时,它会在目录中创建并由应用b2c-extensions-app程序拥有,并且还会添加到租户范围的策略中。这就是允许您在创建应用程序策略时使用它们的原因。

当您使用 Graph API 创建扩展属性时,它不会添加到策略中,并且通常在b2c-extensions-app. 您可以直接在自定义策略中使用这些属性,但它们不会出现在门户中,也不能在通过门户创建的策略中使用。

最佳实践是仅通过门户创建扩展属性,以便它们可用于所有策略。这允许客户将自定义策略与内置的 B2C 用户流混合搭配。