我正在尝试为我的 Azure Databricks 工作区生成 OAuth 令牌,以访问生产中的模型服务 API。我使用的代码成功生成了令牌,但当我尝试使用它时,我不断收到 401 错误,并显示消息“缺少访问模型服务端点的授权详细信息”。
这是我正在使用的代码:
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)
OAuth 令牌的生成似乎没有任何问题。我还确保我的服务主体拥有访问 Databricks 工作区中的模型服务端点所需的权限。
但是,当使用此令牌调用模型服务 API 端点时,我收到以下响应:
{
"error_code": 401,
"message": "Missing authorization details for accessing model serving endpoints"
}
其他背景: 我已经向 Databricks 中的服务主体分配了权限。 我使用 all-apis 范围来覆盖模型服务端点。 有没有人遇到过这个问题或者对导致 401 错误的原因有建议?
该错误表明您在检索令牌后提供的授权详细信息无效。
以下是如何使用您拥有的令牌发出请求的几种方法。
在 python 中使用下面的示例代码。
import requests,json
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {access_token}"
}
body = {
"dataframe_split": {
"columns": ["prompt"],
"data": [["Hello, I'm a language model,"]]
}
}
response = requests.post(url, headers=headers, json=body)
response.json()
根据您的模型给出身体,并确保您给出的
Authorization
为Bearer <token>
。
输出:
接下来,在任何 Api 请求工具中。
在
Header
选项卡中添加Authorization
并将值设置为Bearer <token>
,如果您不提及承载者,则会给出401错误,这意味着您的授权不正确。