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

请求提供Node.js调用Azure AD B2C Graph API创建含自定义属性用户的示例代码

Got it!我帮你整理了一个完整的Node.js调用Azure AD B2C Graph API创建用户的示例,刚好覆盖你需要的signInNames字段和自定义用户属性的处理,一起来看看:

前置条件

在开始写代码之前,你需要确认这些准备工作已经完成:

  • 在Azure AD B2C租户中注册了一个后台应用程序,并且给它分配了**User.ReadWrite.All的应用权限**(注意是应用权限,不是委派权限,因为我们是后台无交互调用)
  • 拿到该应用的三个关键信息:客户端ID、客户端密钥、B2C租户ID(可以是租户域名,比如yourtenant.onmicrosoft.com,或者租户GUID)
  • 已经在B2C中创建好自定义用户属性,比如假设你创建了一个叫favoriteColor的属性,它的Graph API字段名是extension_<你的应用ID(去掉横杠)>_favoriteColor(比如应用ID是12345678-1234-1234-1234-1234567890ab,去掉横杠后就是123456781234123412341234567890ab,所以字段名是extension_123456781234123412341234567890ab_favoriteColor)

Node.js代码示例

首先安装依赖包(我们用axios来发HTTP请求):

npm install axios

然后是完整的代码:

const axios = require('axios');

// 配置信息,替换成你自己的
const config = {
  tenantId: 'your-tenant-id.onmicrosoft.com', // 你的B2C租户ID/域名
  clientId: 'your-client-id', // 后台应用的客户端ID
  clientSecret: 'your-client-secret', // 后台应用的客户端密钥
  // 自定义属性字段名,替换成你实际的
  customAttributeName: 'extension_123456781234123412341234567890ab_favoriteColor'
};

// 第一步:获取Graph API的访问令牌
async function getAccessToken() {
  try {
    const response = await axios.post(
      `https://login.microsoftonline.com/${config.tenantId}/oauth2/v2.0/token`,
      new URLSearchParams({
        grant_type: 'client_credentials',
        client_id: config.clientId,
        client_secret: config.clientSecret,
        scope: 'https://graph.microsoft.com/.default'
      }),
      {
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        }
      }
    );
    return response.data.access_token;
  } catch (error) {
    console.error('获取令牌失败:', error.response?.data || error.message);
    throw error;
  }
}

// 第二步:调用Graph API创建用户
async function createB2CUser() {
  try {
    const accessToken = await getAccessToken();
    
    const userData = {
      accountEnabled: true,
      displayName: 'John Doe', // 用户显示名称
      mailNickname: 'johndoe', // 邮箱别名
      // signInNames字段:用户的登录标识,支持多个(比如邮箱、用户名)
      signInNames: [
        {
          type: 'emailAddress', // 登录类型:emailAddress或userName
          value: 'john.doe@example.com' // 登录用的邮箱
        }
        // 可以再加一个用户名类型的登录标识
        // ,{
        //   type: 'userName',
        //   value: 'johndoe123'
        // }
      ],
      // 密码配置
      passwordProfile: {
        password: 'StrongPass123!', // 注意要符合B2C的密码策略
        forceChangePasswordNextSignIn: false // 是否要求用户下次登录改密码
      },
      passwordPolicies: 'DisablePasswordExpiration, DisableStrongPassword', // 根据需求调整
      // 自定义用户属性
      [config.customAttributeName]: 'Blue' // 这里填你的自定义属性值
    };

    const response = await axios.post(
      'https://graph.microsoft.com/v1.0/users',
      userData,
      {
        headers: {
          'Authorization': `Bearer ${accessToken}`,
          'Content-Type': 'application/json'
        }
      }
    );

    console.log('用户创建成功:', response.data);
    return response.data;
  } catch (error) {
    console.error('创建用户失败:', error.response?.data || error.message);
    throw error;
  }
}

// 执行创建用户
createB2CUser();

关键细节说明

  1. signInNames字段:这是Azure AD B2C用户的核心登录标识,是一个数组,每个元素包含type和value。常用的type值有emailAddress(邮箱登录)和userName(用户名登录),你可以同时添加多个,用户用任意一个都能登录。
  2. 自定义属性命名:一定要注意格式是extension_<应用ID(无横杠)>_<属性名>,这个应用ID是你用来调用Graph API的那个后台应用的ID,不是用户流或者其他应用的ID。你可以在Azure门户的应用注册里找到这个ID,去掉所有-符号即可。
  3. 权限与令牌:我们用的是client_credentials授权流,因为后台创建用户不需要用户交互,必须使用应用权限(而不是委派权限),所以要确保你给应用分配的是应用权限,并且已经授予管理员同意。
  4. 密码策略:代码里的passwordPolicies是关闭了密码过期和强密码要求,如果你需要强制用户使用强密码,把DisableStrongPassword去掉即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:51:08