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

Python调用Synapse数据平面API报InvalidTokenAuthenticationAudience错误

问题原因

InvalidTokenAuthenticationAudience错误由访问令牌受众不匹配触发:申请AAD令牌时传入的目标资源标识错误,导致令牌的aud声明值不符合Synapse数据平面API的校验规则,鉴权被拒绝。
原代码令牌获取逻辑存在两处错误:

  1. ADAL库acquire_token_with_client_credentials方法的参数顺序为(resource, client_id, client_secret),第一个参数需传入待访问服务的资源标识符,原代码错传为服务主体自身的客户端ID
  2. Synapse数据平面API要求令牌对应的资源标识必须为Synapse服务公开端点,不能混用ARM控制平面、Microsoft Graph等其他服务的资源标识
修复步骤
  • 修正令牌获取参数:第一个参数传入Synapse数据平面合法资源URI https://dev.azuresynapse.net/(末尾斜杠不可省略,需完全匹配),第二个参数传入服务主体客户端ID,第三个参数传入服务主体客户端密钥
  • 配置工作区权限:在Synapse工作区的访问控制(IAM)中,给调用的服务主体分配至少Synapse Artifact User角色,否则令牌校验通过后仍会返回403权限错误
修复后可运行代码
import requests
import adal

TENANT_ID = "XXX"
CLIENT_ID = "XXX"
CLIENT_SECRET = "XXX"
AUTHORITY = f"https://login.microsoftonline.com/{TENANT_ID}"
context = adal.AuthenticationContext(AUTHORITY)
# 修正参数顺序与资源URI
token = context.acquire_token_with_client_credentials(
    resource="https://dev.azuresynapse.net/",
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET
)
endpoint = "https://XXX.dev.azuresynapse.net/linkedservices?api-version=2020-12-01"
http_headers = {
    'Authorization': 'Bearer ' + token['accessToken'],
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}
response = requests.get(url=endpoint, headers=http_headers)
print("response.text:", response.text)
校验排查方法

如果修复后仍报错,可对返回的accessToken做JWT解码,检查payload中aud字段值:

  • 若值为https://management.azure.com/或https://management.core.windows.net/,说明传入了ARM控制平面的资源标识,该类令牌仅能用于Synapse控制平面操作,无法调用数据平面接口
  • 若值为服务主体的CLIENT_ID,说明资源参数仍传错,需重新检查参数传入顺序
  • 补充说明:ADAL库已停止官方维护,长期使用建议迁移到MSAL库,MSAL申请令牌时对应的Synapse资源标识与上述值一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:22:21