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

已获取Token但调用Azure Business Central自定义API仍返回401未授权

"roles": [
"Automation.ReadWrite.All",
"app_access",
"AdminCenter.ReadWrite.All",
"API.ReadWrite.All"
],
...

"ver": "1.0"
}.[Signature]

请问问题可能出在哪里?如何确认所需权限,以及需要采取哪些解决措施?

---

## 排查方向与解决措施

### 1. 自定义API的专属权限未配置
- 当前Token中的权限是Business Central原生API的通用权限(如`API.ReadWrite.All`),但自定义API(`effekt/timeReport`)可能需要单独授权:
  - 登录Business Central管理后台,找到该自定义API所属的扩展,确认是否为你的Azure AD应用分配了对应访问权限(比如自定义角色或API专属权限)。
  - 检查自定义API的设置,是否允许`client_credentials`模式的服务主体访问,部分自定义API默认只支持用户委托模式。

### 2. Token请求的范围不匹配
- 尝试将获取Token时的`scope`改为自定义API的专属范围:`https://api.businesscentral.dynamics.com/v2.0/{TENANT_ID}/Production/api/effekt/timeReport/v2.0/.default`,重新获取Token后再调用API。

### 3. API调用的Token传递错误
- 确认调用API时,`Authorization`请求头格式正确:必须是`Bearer {access_token}`,注意`Bearer`后有空格,且Token无多余字符或换行。
- 检查请求的`Content-Type`是否符合自定义API要求(通常为`application/json`),格式错误也可能触发401。

### 4. Azure应用权限未完成管理员同意
- `client_credentials`模式下,Azure应用配置的所有权限必须经过租户管理员同意,否则Token中显示的权限实际无效。登录Azure AD后台,确认权限状态为“已同意”。

### 5. API地址参数错误
- 核对API地址中的`{TENANT_ID}`是否与Token中的`tid`(租户ID)完全一致,`{COMPANY_ID}`是否与Business Central中实际的公司ID匹配,大小写或格式错误会导致权限验证失败。

### 如何确认所需权限
- 查看自定义API的开发文档或联系开发者,明确其要求的具体权限(可能是自定义权限集或特定Azure AD角色)。
- 在Business Central中,为Azure应用对应的服务账户分配自定义API所需的权限集,确保服务账户有权访问该API对应的资源。

---

内容的提问来源于stack exchange,提问作者Jemil Riahi
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:04:53