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

MSOnline脚本迁移至MS Graph API的多租户用户查询问题

合作伙伴通过MS Graph API跨租户拉取客户用户数据方案

核心思路

作为CSP合作伙伴,无需为每个客户租户单独创建应用,只需在自己的合作伙伴租户中配置好租户范围的应用权限,就能通过MS Graph API直接访问所有关联客户租户的资源,完全匹配原MSOnline脚本的跨租户操作逻辑。

步骤实现

  1. 配置应用权限(关键)

    • 在合作伙伴租户的应用注册中,添加User.Read.All应用权限(注意选应用权限,不是委派权限)。
    • 完成管理员同意:在应用注册的「API权限」页面点击「授予管理员同意」,该同意会自动覆盖所有关联的客户租户,无需客户单独操作。
  2. 获取客户租户ID
    调用Graph API获取所有客户合约,提取每个合约中的customerId字段作为客户租户ID,对应原Get-MsolPartnerContract的功能:

    GET https://graph.microsoft.com/v1.0/contracts
    

    用Microsoft Graph PowerShell模块实现:

    $contracts = Get-MgContract -All
    
  3. 拉取客户租户的用户数据
    针对每个客户租户ID,有两种方式访问其用户资源:

    • 方式一:通用Graph端点+租户ID路径参数
      GET https://graph.microsoft.com/v1.0/tenants/{customerId}/users
      
    • 方式二:租户专属Graph端点
      GET https://{customerId}.graph.microsoft.com/v1.0/users
      

    用Microsoft Graph PowerShell模块的简化实现(推荐):

    # 以应用身份登录合作伙伴租户(示例用证书认证,也可使用ClientSecret)
    Connect-MgGraph -ClientId "你的应用ID" -TenantId "合作伙伴租户ID" -CertificateThumbprint "证书指纹"
    
    # 遍历所有客户租户拉取用户
    foreach ($contract in $contracts) {
        $customerTenantId = $contract.CustomerId
        $users = Get-MgUser -TenantId $customerTenantId -All
        # 按需处理用户数据,比如导出到CSV
        $users | Select-Object Id, DisplayName, UserPrincipalName | Export-Csv -Path ".\用户_$customerTenantId.csv" -NoTypeInformation
    }
    

注意事项

  • 必须使用应用权限:委派权限需要用户交互,且跨租户使用时需每个客户租户管理员单独授权,不符合无人值守脚本的需求。
  • 权限范围匹配:如果需要除读取用户外的其他操作,可添加对应应用权限(如User.ReadWrite.All)。
  • 令牌有效性:发起请求的令牌必须来自合作伙伴租户的应用,且令牌中包含已授予的应用权限,否则会返回权限不足错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:43:16