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

使用Azure服务主体令牌调用Databricks Jobs API GET接口遇Aud声明错误

问题分析与解决

错误原因

你遇到的400错误是因为服务主体生成的JWT令牌受众(aud)声明不匹配:Databricks Jobs API期望的aud是2ff814a6-3304-4ab8-85cb-cd0e6f879c1d(Databricks服务的资源ID),但你的令牌实际aud是00000002-0000-0000-c000-000000000000(Microsoft Graph的资源ID)。这说明生成令牌时请求的目标资源不正确,导致令牌无法被Databricks的GET API验证通过(POST请求可能采用了不同的验证逻辑)。

解决步骤

1. 修正令牌请求端点

你的token_endpoint中的<databricks-instance>是错误的,需替换为Azure AD租户ID(可以是租户GUID或域名,比如contoso.onmicrosoft.com)。正确格式:

token_endpoint = "https://login.microsoftonline.com/<your-azure-ad-tenant-id>/oauth2/token"

2. 调整Scope参数

生成针对Databricks的令牌,需指定正确的资源范围,两种可选格式:

  • 方式一:使用Databricks服务资源ID
    "scope": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default"
    
  • 方式二:使用你的Databricks工作区URL
    "scope": "https://adb-1366553829746932.12.azuredatabricks.net/.default"
    

3. 完整修正后的令牌生成代码

import requests
import json
from databricks_cli.sdk.service import JobsService
from databricks_cli.sdk.api_client import ApiClient
import time 

# 生成服务主体令牌请求
sp_id = dbutils.secrets.get("scope name", "key")
sp_sec = dbutils.secrets.get("scope name", "key")
# 替换为你的Azure AD租户ID
token_endpoint = "https://login.microsoftonline.com/<your-azure-ad-tenant-id>/oauth2/token"
token_request_data = {
    "grant_type": "client_credentials",
    "client_id": sp_id,
    "client_secret": sp_sec,
    "scope": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default"
}

# 发送请求获取令牌
response = requests.post(token_endpoint, data=token_request_data)
token_sp = response.json()["access_token"]

4. 验证令牌正确性

用jwt.io解码token_sp,确认aud字段值为2ff814a6-3304-4ab8-85cb-cd0e6f879c1d,再调用Jobs API的GET接口即可正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:15:06