You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Graph SDK 5更新Microsoft B2C用户身份遇请求错误求助

解决Microsoft Graph v5.x更新用户Identities集合时的signInType错误

在Graph v5.x中使用PatchAsync更新用户身份时,即便你通过Fiddler确认新身份的signInType不为空,仍可能触发该错误——问题出在原有身份的字段序列化丢失。v5客户端默认采用增量序列化逻辑,未显式赋值的字段不会被包含在PATCH请求中,但Azure AD要求整个Identities数组里的每个身份对象都必须包含signInType、Issuer和IssuerAssignedId。

正确实现方式

不要直接复用从Graph获取的Identities集合,而是创建全新的ObjectIdentity列表,显式复制原有身份的所有必填字段,再添加新身份:

// 获取目标用户
var user = await client.Users[userId].GetAsync();

// 创建全新身份列表,显式复制原有身份的所有必填字段
var updatedIdentities = user.Identities.Select(id => new ObjectIdentity
{
    SignInType = id.SignInType,
    Issuer = id.Issuer,
    IssuerAssignedId = id.IssuerAssignedId
}).ToList();

// 添加新身份
updatedIdentities.Add(new ObjectIdentity
{
    SignInType = "emailAddress",
    Issuer = issuer,
    IssuerAssignedId = issuerAssignedId
});

// 构建仅包含Identities的请求体
var requestBody = new User
{
    Identities = updatedIdentities
};

// 执行PATCH操作
await client.Users[userId].PatchAsync(requestBody);

错误原因解析

  • v4版本的UpdateAsync是PUT操作,会发送完整的用户对象,即使原有身份的字段未修改也会被包含在请求中。
  • v5版本的PatchAsync是PATCH操作,客户端仅序列化显式修改过的字段。如果直接复用原有Identities集合,集合里的原有ObjectIdentity对象因未被显式赋值(仅从Graph获取未修改),序列化时会省略signInType等字段,触发Azure AD的校验错误。

内容的提问来源于stack exchange,提问作者dawidg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:52:55