Azure Databricks OAuth Token生成正常但调用模型服务API报401错误求助
问题:Azure Databricks OAuth令牌生成成功但调用模型服务API返回401错误
我正尝试为Azure Databricks工作区生成OAuth令牌,以访问生产环境中的模型服务API。使用以下代码可成功生成令牌,但调用API时持续收到401错误,错误信息为"Missing authorization details for accessing model serving endpoints"。
生成令牌的代码
import requests # Azure Databricks and Managed Service Principal Details client_id = "XXXX" # Application ID client_secret = "XXXXX" # Client Secret workspace_url = "XXXXXX" # Databricks workspace URL # Databricks-specific endpoint URL for token generation token_endpoint_url = f"{workspace_url}/oidc/v1/token" # Function to get OAuth access token with all-apis scope def get_workspace_oauth_token(): response = requests.post( token_endpoint_url, auth=(client_id, client_secret), data={ "grant_type": "client_credentials", "scope": "all-apis" } ) response.raise_for_status() # Check for request errors return response.json(), response.json().get("access_token") # Generate the access token response, access_token = get_workspace_oauth_token() print("OAuth token generated successfully:", access_token)
API调用错误响应
调用模型服务API时收到的响应:
{ "error_code": 401, "message": "Missing authorization details for accessing model serving endpoints" }
补充说明:已为Databricks中的服务主体分配权限,使用all-apis scope覆盖模型服务端点。
排查建议
- 检查请求头格式:调用API时必须将令牌放在
Authorization请求头中,格式为Bearer <access_token>,注意不要遗漏Bearer前缀,也不要在前缀和令牌之间多加空格。 - 解析令牌验证权限:用本地JWT解析工具解码生成的令牌,查看
scp字段是否包含all-apis,确认权限范围确实生效。 - 确认服务主体权限同步:检查服务主体是否被添加到拥有
Model Serving Admin或Model Serving User权限的工作区组中,部分情况下权限分配需要等待1-2分钟才能同步生效。 - 核对API端点URL:确保调用的模型服务端点URL与工作区区域匹配,没有拼写错误(比如区域前缀、端点路径)。
- 检查令牌有效期:查看令牌的
exp字段对应的过期时间,确认令牌未过期,过期令牌会直接导致401错误。 - 测试个人访问令牌(PAT):尝试生成Databricks个人访问令牌调用API,排除OIDC流程本身的兼容性问题。
内容的提问来源于stack exchange,提问作者Gustavo Carvalho
相关产品推荐
相关产品推荐

