我尝试从 Power Automate 流程调用 Databricks REST API 并收到 403“未经授权访问工作区”。该流程的第一步是获取承载令牌,第二步是调用过程。所有 api 的范围均已正确设置。第一个请求顺利完成,我能够获得令牌。但第二个失败并显示 403。相同的流程在 Postman 中运行良好,并且 Databricks 端的服务主体的所有权限都经过验证。作为额外的验证,我尝试使用 Postman 中 Power Apps 中的不记名令牌进行查询,结果一切正常,这让我想知道我的 Power Apps 流程中缺少什么。如果您能提供任何意见来解决该问题,我将不胜感激。
Request:
{
"uri": "https://adb-xxxxxxxx.12.azuredatabricks.net/api/2.0/sql/statements",
"method": "POST",
"headers": {
"Authorization": "Bearer Token",
"Content-Type": "application/json"
},
"body": {
"statement": "A select query \n",
"warehouse_id": "warehouseid"
}
}
Response: {
"statusCode": 403,
"headers": {
"X-Request-ID": "f7b4f4c6",
"x-databricks-reason-phrase": "Unauthorized access to workspace: ",
"Vary": "Accept-Encoding",
"Date": "Wed, 18 Dec 2024 23:34:04 GMT",
"Server": "databricks",
"Content-Type": "application/json; charset=utf-8",
"Content-Length": "81"
},
"body": {
"error_code": 403,
"message": "Unauthorized access to workspace: "
}
}
按照以下步骤获取访问令牌并发出sql语句请求。
网址:
https://<host_name>.azuredatabricks.net/oidc/v1/token
方法:
POST
内容类型:
application/x-www-form-urlencoded
请求正文
grant_type=client_credentials&scope=all-apis&client_id=<client_id>&client_secret=<Your_seceret>
在此添加上一步中您的网络服务的响应。
网址:
https://<host_name>.azuredatabricks.net/api/2.0/sql/statements
方法:
POST
内容类型:
application/json
自定义标题:
Authorization: Bearer %JsonAsCustomObject['access_token']%
请求正文
{
"statement": "select 1 as one",
"warehouse_id": "cc51079db3510efa"
}
您在授权标头中提供自定义 json 对象变量,例如
Bearer %JsonAsCustomObject['access_token']%
您将得到回复结果。
流量:
输出: