已获取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
相关产品推荐
相关产品推荐

