我正在尝试访问API以从PowerBI下载使用统计数据并与其他报告集成。
import requests
import json
base_url = "https://api.powerbi.com/v1.0/myorg/admin/"
url = "https://login.microsoftonline.com/my_tenant_id_goes_here/oauth2/token"
scope = "https://analysis.windows.net/powerbi/api/.default"
grant_type = "client_credentials"
client_id = "my_client_id"
client_secret = "my_client_secret"
resource = "https://analysis.windows.net/powerbi/api"
header = {
"scope": scope,
"grant_type": grant_type,
"client_id": client_id,
"client_secret": client_secret,
"resource": resource
}
r = requests.post(url, data = header)
login_result = r.json()
print(login_result)
token_type = login_result.get("token_type")
access_token = login_result.get("access_token")
authorization_key = token_type + " " + access_token
print('Authentication Key Generated')
headers = {'Content-Type':'application/json','Authorization': authorization_key}
print('Consuming Dashboards Rest End Point')
data = requests.get(base_url + 'dashboards', headers=headers)
print(data)
json_data = data.content
print(json_data)
打印后得到以下结果(login_result)
{'token_type': 'Bearer', 'expires_in': '3599', 'ext_expires_in': '3599', 'expires_on': '1667296164', 'not_before': '1667292264', 'resource': 'https://analysis.windows.net/powerbi/api', 'access_token': 'longlongalphanumericstring'}
它似乎已经正确地找到了访问令牌。但是当我打印数据时,我得到了一个<401>错误,json_data读取
b'{"error":{"code":"PowerBINotAuthorizedException","pbi.error":{"code":"PowerBINotAuthorizedException","parameters":{},"details":[],"exceptionCulprit":1}}}'
我已在Azure中签入权限。我拥有 Jmeter 板。读取。所有权限。
当我从
基本网址=“https://api.powerbi.com/v1.0/myorg/admin/“
我得到
'{"Message":"API is not accessible for application"}'
在我看来,这像是一个权限错误,但我似乎无法导航到Azure界面来修复它。
1条答案
按热度按时间62o28rlo1#
我试图通过Postman在我的环境中重现相同的错误,但得到了如下相同的错误:
要解决此错误,请尝试以下方法:
我创建了Azure AD应用程序并授予了权限:
我创建了一个Azure安全组并将服务主体添加为成员,如下所示:
在PowerBi管理门户中,启用**
Allow service principals to use read-only admin APIs
**添加上面创建的安全组:它需要大约**
15 mins
来反映设置。现在我通过客户端凭据流生成令牌,如下所示:我使用了
v2.0
**令牌终结点:指令集
我能够成功访问
PowerBi
,如下所示:如果问题仍然存在,请尝试使用授权代码流,因为**
Tenant.ReadWrite.All
**是应用程序权限。