使用MS Graph API在Azure AD中进行租户间用户迁移的可行性及方法
跨Azure AD租户用户迁移方案(基于MS Graph API)
可以实现跨租户用户迁移,但MS Graph没有提供直接的跨租户用户迁移原生API,需要通过导出源租户用户数据+在目标租户重建用户及关联资源的方式完成。以下是具体操作流程:
一、前置准备
- 源、目标租户均需拥有全局管理员或具备
User.ReadWrite.All、Directory.Read.All等权限的账号 - 在两个租户中分别注册MS Graph应用,获取有效访问令牌(支持客户端凭据流、授权码流)
二、分步操作
1. 导出源租户用户数据
通过MS Graph API拉取需要迁移的用户完整属性:
- 单用户查询:调用
GET /users/{user-id},按需指定返回字段(比如$select=id,displayName,userPrincipalName,mail,jobTitle,department) - 批量查询:调用
GET /users?$filter=<筛选条件>&$select=<属性列表>,批量导出符合条件的用户数据 - 额外关联数据:若需迁移组成员身份,调用
GET /users/{user-id}/memberOf获取用户所属组信息 - 注意:出于安全限制,用户密码无法通过API导出,需在目标租户创建用户后重置
2. 在目标租户创建用户
使用MS Graph的创建用户接口,将导出的属性填入请求体:
POST /users Content-Type: application/json { "accountEnabled": true, "displayName": "John Doe", "mailNickname": "johndoe", "userPrincipalName": "john.doe@target-tenant.com", "givenName": "John", "surname": "Doe", "jobTitle": "Senior Developer", "department": "Tech", "passwordProfile": { "forceChangePasswordNextSignIn": true, "password": "Temp@Pass123" } }
- 注意:目标租户的
userPrincipalName必须匹配租户的有效域名,若源租户UPN域名不在目标租户名下,需调整为目标租户的合法域名
3. 迁移关联资源(可选)
- 组成员身份:先在目标租户创建对应组(若不存在),再调用
POST /groups/{group-id}/members/$ref将新用户添加到组中 - 许可证分配:获取源租户用户的许可证SKU ID,调用
POST /users/{user-id}/assignLicense在目标租户分配对应许可证(需确保目标租户有可用配额) - 应用权限:若用户有特定应用的访问权限,需在目标租户重新配置应用分配或权限
4. 验证迁移结果
- 调用
GET /users/{target-user-id}检查用户属性是否匹配 - 验证用户的组成员身份、许可证是否正常生效
- 通知用户登录目标租户并完成密码重置
三、关键注意事项
- 跨租户迁移无法保留用户原始
objectId,新用户会生成新ID,依赖objectId的应用或服务需重新配置 - 密码必须重置,无法直接迁移
- 部分混合AD专属属性(如
onPremisesSecurityIdentifier)仅适用于本地AD同步场景,纯云AD无需处理 - 建议先测试少量用户迁移,确认流程无误后再批量操作
内容的提问来源于stack exchange,提问作者Rakshana murali
相关产品推荐
相关产品推荐

