Azure AD B2C 使用 GraphServiceClient 设置自定义属性时出现异常

dan*_*dan 3 azure-ad-b2c microsoft-graph-api

从这里遵循指示:https://learn.microsoft.com/en-us/azure/active-directory-b2c/user-flow-custom-attributes ?pivots=b2c-user-flow

在此输入图像描述

我能够很好地创建和获取用户:

// This works!
var graphServiceClient = new GraphServiceClient(
                    $"https://graph.microsoft.com/beta",
                    AuthenticationProvider);
var user = await graphClient.Users[userId].Request().GetAsync();

if (user.AdditionalData == null)
    user.AdditionalData = new Dictionary<string, object>();
user.AdditionalData[$"extension_xxxxxxx_Apps] = "TestValue";
// this does not work!
result = await graphClient.Users[user.Id].Request().UpdateAsync(msGraphUser);
Run Code Online (Sandbox Code Playgroud)

对于 xxxxxxx,我尝试了租户中 b2c-extensions-app 中的客户端 ID 和对象 ID。

例外

Microsoft.Graph.ServiceException:'代码:Request_BadRequest 消息:以下扩展属性不可用:extension_xxxxxxx_Apps。

如何从 GraphServiceClient 设置自定义属性?

Sys*_*Lol 5

尝试创建一个“新”用户而不是获取现有用户。当您调用 时UpdateAsync,B2C 只会设置您提供的属性(不会用 覆盖其他属性null)。这可能有帮助,也可能没有帮助,但问题是,我们正在做与上面相同的事情,除了“新”用户,而且它对我们有用。

User b2cUser = await this.GetOurUser(userId);
var additionalData = new Dictionary<string, object>();
additionalData["extension_id-of-extensions-app-here_Foo"] = "Ice Cream Cone";
var updatedB2cUser = new User
{
    AdditionalData = additionalData
};

await this.GraphServiceClient.Users[b2cUser.Id].Request().UpdateAsync(updatedB2cUser);
Run Code Online (Sandbox Code Playgroud)

在实践中,我们包括额外的道具,例如Identities,因为我们使用 B2C 作为身份提供者...所以上面是我们的 B2C 包装器中的一些精简代码,仅显示“自定义属性”部分。

更新 实际上,您可能只需要从扩展应用程序 ID 中删除连字符,然后仔细检查您正在使用哪一个。

在此输入图像描述