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

Len*_*y D 5 c# azure-active-directory azure-ad-graph-api

我正在使用带有 .Net Core 2 的 GraphServiceClient。我正在尝试使用以下代码将 AdditionalData 添加到我的用户

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

                await _graphClient.Users[user.Id].Request().UpdateAsync(updated);
Run Code Online (Sandbox Code Playgroud)

执行此操作时出现以下错误

Microsoft.Graph.ServiceException:代码:Request_BadRequest 消息:指定的一个或多个属性值无效。

有谁知道我做错了什么?

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

Azure AD GraphServiceClient 扩展不起作用

Tie*_*dye 5

要将属性添加到AdditionalData字段,您必须在Azure AD B2C > 用户属性(在 Azure 门户中)中定义属性。例如,如果您创建一个布尔属性Dummy,这将创建一个字段extension_{b2c-extensions-app-id}_Dummy,其中{b2c-extensions-app-id}是自动生成的可查看内容的应用程序 IDb2c-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);
Run Code Online (Sandbox Code Playgroud)


Len*_*y D 1

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

Azure AD GraphServiceClient 扩展不起作用

技巧是添加这样的扩展

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);
Run Code Online (Sandbox Code Playgroud)

然后像这样检索它们。

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;
Run Code Online (Sandbox Code Playgroud)

希望对某人有帮助!

  • 什么是“AzureADExtensions.UserConstants.ExtensionName”? (2认同)