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

