【问题标题】:Azure AD GraphServiceClient can't set AdditionalData against UserAzure AD GraphServiceClient 无法针对用户设置 AdditionalData
【发布时间】:2018-12-07 13:57:07
【问题描述】:

我正在使用 .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);

执行此操作时,我收到以下错误

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

有谁知道我做错了什么?

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

Azure AD GraphServiceClient Extensions not working

【问题讨论】:

标签: c# azure-active-directory azure-ad-graph-api


【解决方案1】:

要将属性添加到 AdditionalData 字段,您必须在 Azure AD B2C > 用户属性 中定义属性(在 Azure 门户中)。例如,如果您创建 Boolean 属性 Dummy,这将创建字段 extension_{b2c-extensions-app-id}_Dummy,其中 {b2c-extensions-app-id} 是自动生成的 b2c-extensions-app 可查看的 应用程序 ID通过导航到 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);

【讨论】:

  • 完美答案谢谢。我突出显示了它说 Remove - 的部分,因为我没有这样做并试图让它工作几个小时......:D
【解决方案2】:

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

Azure AD GraphServiceClient Extensions not working

诀窍是添加这样的扩展

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;

希望对某人有所帮助!

【讨论】:

  • AzureADExtensions.UserConstants.ExtensionName 是什么?
猜你喜欢
  • 2021-09-22
  • 2021-07-08
  • 2017-09-30
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多