使用PowerShell调用Partner REST API获客户列表遇403错误求助
解决Partner Center API 403 Forbidden错误(非SDK方案)
核心问题定位
你当前使用client_credentials(客户端凭据)认证流,但应用注册仅配置了委托权限,而客户端凭据流要求应用级权限才能访问Partner Center API,这是触发403错误的根本原因。
修复步骤
1. 补充应用注册的应用级权限
- 进入Microsoft Entra管理中心 → 应用注册 → 目标应用 → API权限
- 点击添加权限 → 选择Microsoft Partner
- 切换到应用权限标签,勾选
Customer.Read.All(如需写入操作,额外勾选Customer.ReadWrite.All) - 点击添加权限后,点击授予管理员同意(必须完成此步骤才会生效)
2. 修正PowerShell客户端凭据流代码
原代码存在参数冗余问题,修正后的代码如下:
$appId = "你的应用ID" $appSecret = "你的应用密钥" $tenantId = "你的租户ID" # 请求访问令牌 $tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $body = @{ grant_type = "client_credentials" client_id = $appId client_secret = $appSecret scope = "https://api.partnercenter.microsoft.com/.default" } $response = Invoke-RestMethod -Method Post -Uri $tokenUrl -Body $body -ContentType "application/x-www-form-urlencoded" $accessToken = $response.access_token # 调用客户列表API $apiUrl = "https://api.partnercenter.microsoft.com/v1/customers" $headers = @{ "Authorization" = "Bearer $accessToken" "Accept" = "application/json" } try { $customerResponse = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers $headers $customerResponse.items } catch { Write-Host "请求错误: $($_.Exception.Message)" if ($_.ErrorDetails) { Write-Host "API返回详情: $($_.ErrorDetails.Message)" } }
3. 验证权限关联
- 确认你的全局管理员账号在Partner Center中被分配全局管理员或代理商管理员角色
- 将应用注册的服务主体添加到Partner Center权限列表:进入Partner Center → 设置 → 用户和权限 → 应用程序 → 添加目标应用ID,并分配对应角色(如代理商管理员)
SDK代码失败补充说明
你提供的SDK代码同时使用ServicePrincipal和UseAuthorizationCode参数,二者冲突:UseAuthorizationCode用于用户交互的授权码流,ServicePrincipal对应客户端凭据流,需二选一。若要基于委托权限使用授权码流,需移除ServicePrincipal参数,确保代码能弹出登录窗口完成授权。
内容的提问来源于stack exchange,提问作者Bernietechy
相关产品推荐
相关产品推荐

