Azure AD GraphServiceClient 无法针对用户设置 AdditionalData

Azure AD GraphServiceClient can't set AdditionalData against User

我正在将 GraphServiceClient 与 .Net Core 2 一起使用。我正在尝试使用以下代码向我的用户添加附加数据

var updated = new User()
                {
                   AdditionalData = new Dictionary<string, object>
                    {
                        {"OtherEmail", otherEmail},
                        {"OtherRole", otherRole}
                    },
                };

                await _graphClient.Users[user.Id].Request().UpdateAsync(updated);

执行时出现以下错误

Microsoft.Graph.ServiceException : Code: Request_BadRequest Message: One or more property values specified are invalid.

有谁知道我做错了什么?

此外,如果有人可以告诉我如何只针对用户保存我自己的一些元数据,我们将不胜感激。我也试过使用扩展,但我遇到了这个问题。

所以我使用 OpenExtensions 解决了这个问题,这也给我带来了很多问题,可以在这里看到。

技巧是像这样添加扩展

extension = new OpenTypeExtension
                {
                    ExtensionName = AzureADExtensions.UserConstants.ExtensionName,
                    AdditionalData = new Dictionary<string, object>
                    {
                        {"OtherEmail", externalUser.Email},
                        {"OtherRole" , externalUser.Roles.FirstOrDefault()}
                    }
                };

                await _graphClient.Users[user.Id].Extensions.Request()
                    .AddAsync(extension);

然后像这样检索它们。

user = await _graphClient
                    .Users[userId]
                    .Request()
                    .GetAsync();
// Note : you should be able to expand this on original request, but fails for me.
                var extensions = await _graphClient.Users[user.Id].Extensions.Request().GetAsync();
                user.Extensions = extensions;

希望对某人有所帮助!

要将属性添加到 AdditionalData 字段,您必须在 Azure AD B2C > 用户属性(在 Azure 门户中)中定义属性。例如,如果您创建一个 Boolean 属性 Dummy,这将创建字段 extension_{b2c-extensions-app-id}_Dummy,其中 {b2c-extensions-app-id}Application ID 的自动生成的 b2c-extensions-app 可通过导航到 Azure AD B2C > 应用注册(预览版)> b2c-extensions-app 查看(-) 从 ID!

中删除

这将允许您执行以下操作:

var updated = new User()
    {
        AdditionalData = new Dictionary<string, object>
        {
            {"extension_0000000000000000000000000000_Dummy", false}
        },
    };

await _graphClient.Users[user.Id].Request().UpdateAsync(updated);