我正在尝试连接 Power Bi 服务上托管的 Power Bi 报告。我的 JupyterLab 中有两个版本的代码。第一个是使用服务主体进行连接,第二个是 DeviceCodeLoginAuthentication。在服务主体方法中,当我打印报告时,我无法加载报告,它显示为 Report()。
**service principal method :**
from powerbiclient import Report, models
import requests
tenant_id = 'AAA'
client_id = 'BBB'
client_secret = 'CCC' # Be cautious with secrets!
url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token'
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
body = {
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret,
'scope': 'https://analysis.windows.net/powerbi/api/.default'
}
response = requests.post(url, headers=headers, data=body)
if response.status_code == 200:
# Parse the access token from the response
access_token = response.json().get('access_token')
#print("Access Token acquired successfully!")
#print(access_token) # For debugging purposes only, don't print secrets in production
else:
# Print the error details if the token request failed
print(f"Error: {response.status_code}")
print(f"Error response: {response.json()}")
group_id="DDD"
report_id="EEE"
report = Report(group_id=group_id, report_id=report_id, auth=access_token)
report
**DeviceCodeLoginAuthentication method(HERE REPORT IS LOADING SUCESSFULLY) :**
from powerbiclient import Report, models
group_id="DDD"
report_id="EEE"
from powerbiclient.authentication import DeviceCodeLoginAuthentication
device_path= DeviceCodeLoginAuthentication()
display1 = Report(group_id=group_id, report_id=report_id, auth=device_path)
display1
请建议方法一中缺少什么,即服务主体。
您正在使用服务主体进行身份验证,但 powerbi-jupyter 库不支持这一点。该库需要嵌入令牌,而不是 AAD 令牌。 在“powerbi-jupyter”库中,我们使用“嵌入您的组织”方案,该方案特别需要 Azure Active Directory (AAD) 令牌。因此,服务主体方法不适用于该库。
更多详细信息可以参考这个文档: 嵌入 Power BI 应用程序所需的权限令牌 - Power BI |微软学习