调用Partner Center API获取客户列表时遇到403 Forbidden错误的求助
调用Partner Center API获取客户列表时遇到403 Forbidden错误的求助
问题背景
我打算使用Partner Center API完成一些操作(本次尝试获取客户列表),已经在租户中完成了以下配置:
- 已配置API权限(已授予租户级权限)
- 应用支持多租户账户
- 已开启公共客户流程
- 应用已成功添加到Partner Center的应用列表中
我的代码
我编写了如下Python脚本调用Partner Center API:
import requests import json client_id = "myAppID" client_secret = "myAppSecret" tenant_id = "myTenantID" def getTokenPC(): url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" payload = { "grant_type": "client_credentials", "client_id": client_id, "client_secret": client_secret, "scope": "https://api.partnercenter.microsoft.com/.default" } r = requests.post(url, data=payload) r.raise_for_status() return r.json()["access_token"] def getClients(token): url = f"https://api.partnercenter.microsoft.com/v1/customers" headers = { "Authorization": f"Bearer {token}", "Accept": "application/json", } r = requests.get(url, headers=headers) r.raise_for_status() return r.json() partnerCenterToken = getTokenPC() clients = getClients(partnerCenterToken)
遇到的问题
运行脚本时可以成功获取Bearer令牌,但调用API获取客户列表时,触发了403禁止访问错误:
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.partnercenter.microsoft.com/v1/customers
我在论坛中搜索过相关内容,有些帖子提到需要给应用分配“Manager”角色,但我在Partner Center中找不到这个配置项。我猜测问题出在令牌缺少足够的权限来访问API,但不确定具体原因。如果需要更多信息,请告知。
问题原因与解决方案
这个403错误的核心原因是你的应用在Partner Center中没有被分配足够的权限角色,导致即使获取了令牌,也没有权限读取客户数据。下面是具体的配置步骤:
步骤1:在Partner Center中给应用分配角色
- 登录Partner Center,点击右上角的齿轮图标进入合作伙伴设置
- 选择用户和角色选项卡
- 切换到应用程序子标签页,找到你创建的目标应用
- 点击应用名称进入详情页,点击页面上的添加角色按钮
- 在弹出的角色列表中,根据需求选择合适的角色:
- 如果需要全权限操作,选全局管理员或代理商全局管理员
- 仅需读取客户数据的话,选只读管理员即可
- 保存配置,等待5-10分钟让权限生效
步骤2:验证与排查
重新运行你的Python脚本,此时应该可以正常获取客户列表了。如果仍然报错,可以按以下方式排查:
- 用jwt.ms工具解码你的Bearer令牌,检查
roles字段中是否包含对应的Partner Center权限(比如Customer.Read.All、Directory.Read.All等) - 确认你的应用确实是在Partner Center的应用列表中完成关联的,而非仅在Azure AD中注册
- 检查Azure AD的API权限设置,确认
https://api.partnercenter.microsoft.com/.default权限是租户级管理员已同意的状态
补充说明
之前提到的“Manager”角色是旧版Partner Center的称呼,新版中已经整合到用户和角色-应用程序的权限配置里了,按照上述步骤就能找到对应的入口。另外,一定要确保你的应用是用合作伙伴租户的Azure AD注册的,普通租户的Azure AD应用无法关联Partner Center的权限体系哦。




