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

如何通过Microsoft SSO在Azure AD B2C中创建用户并关联OID

在Azure AD B2C中通过Graph API创建Microsoft SSO无密码用户及账户关联方案

问题背景

已实现Microsoft SSO流程,可从SSO响应中获取用户邮箱、oid、姓名等信息。当前通过Graph API创建本地密码用户的流程正常,请求体如下:

const user = {
    displayName: name,
    identities: [
        {
            signInType: "userName",
            issuer: `${this.TENANT_NAME}`,
            issuerAssignedId: name,
        },
        {
            signInType: "emailAddress",
            issuer: `${this.TENANT_NAME}`,
            issuerAssignedId: email,
        },
    ],
    userPrincipalName: `${secret}@${this.TENANT_NAME}`,
    mail: email,
    passwordProfile: {
        password: password,
        forceChangePasswordNextSignIn: false,
    },
    passwordPolicies: "DisablePasswordExpiration",
};

注:上述代码适用于用户自行设置密码的普通邮箱注册流程。

尝试基于Microsoft SSO信息创建无密码用户时,仅移除passwordProfile和passwordPolicies字段、添加accountEnabled: true均返回400: Bad Request错误,错误信息有限。


问题解答

1. 如何通过Graph API在Azure AD B2C中创建来自Microsoft SSO的无密码用户?

创建Microsoft SSO关联的无密码用户,核心是将用户身份标识设置为联邦身份类型,而非本地密码/用户名类型。正确的请求体如下:

const user = {
    displayName: name,
    identities: [
        {
            signInType: "federated",
            issuer: `microsoft.com`,
            issuerAssignedId: email,
        },
    ],
    userPrincipalName: `name ${secret}`, // 可根据租户规则设置合法的UPN格式
    mail: email,
    accountEnabled: true,
};

关键要点:

  • 将signInType设为federated,标识该用户为联邦身份登录(依赖Microsoft SSO)
  • issuer指定为microsoft.com,对应Microsoft身份提供商
  • 无需包含passwordProfile和passwordPolicies字段,因为用户通过SSO登录,不需要本地密码

调用Graph API的代码保持原有逻辑即可:

async getAccessToken(): Promise<any> {
    try {
        const response = await this.CREDENTIAL.getToken(
            "https://graph.microsoft.com/.default"
        );
        return response.token;
    } catch (error) {
        console.error("Error obtaining access token:", error);
    }
}
const response = await axios.post(
    "https://graph.microsoft.com/v1.0/users",
    user,
    {
        headers: {
            Authorization: `Bearer ${accessToken}`,
            "Content-Type": "application/json",
        },
    }
);
console.log(response.data);
return response.data;

2. 如何关联Graph API创建用户返回的azureId与Microsoft SSO返回的已创建账户的oid?

  • Graph API创建用户成功后,返回的id字段即为该用户在Azure AD B2C中的azureId(用户对象ID)
  • Microsoft SSO响应中的oid是该用户在Microsoft身份提供商(Microsoft Entra ID)中的唯一标识
  • 关联逻辑:
    1. 创建用户时,确保identities数组中issuerAssignedId使用SSO返回的用户邮箱(或唯一标识),保证联邦身份的唯一性
    2. 后续可通过Graph API查询用户的identities属性,找到signInType: "federated"且issuer: "microsoft.com"的条目,其issuerAssignedId对应SSO返回的邮箱,从而关联azureId与SSO的oid
    3. 也可在创建用户时,将SSO返回的oid存储到用户的扩展属性中,方便后续直接匹配查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:36:12