Power BI 活动日志 REST API 获取访问令牌

Posted

技术标签:

【中文标题】Power BI 活动日志 REST API 获取访问令牌【英文标题】:Power BI Activities Log REST API Get Access Token 【发布时间】:2021-05-23 15:59:14 【问题描述】:

我一直在疯狂地尝试从 Power BI Rest API 中提取活动日志。我可以使用 Microsoft 的这种“尝试”方法来做到这一点 https://docs.microsoft.com/en-us/rest/api/power-bi/admin/getactivityevents

我必须登录才能使用此工具,然后我会获得一个有效期为 1 小时的不记名 JWT 令牌,并且可以在脚本内的后续获取请求的标头中使用。但是令牌会在 1 小时后过期,我必须重新登录才能获取新令牌并更新我的脚本。我试图在每次过期时检索 JWT 令牌,而无需通过 GUI 登录。这是为了自动从 Power BI 获取日志以发送到安全应用程序进行分析。在 Azure/Power BI 方面,我使用此链接 https://dev.powerbi.com/Apps 注册了一个本机应用程序。在 Azure 应用注册中,我已授予该应用所有 API 权限。

我有一些示例 python 代码使用我试图在这里工作的 adal 库。我猜 Powershell 解决方案也可以接受,但我更喜欢使用 python。

import adal
import requests
import json
import pandas


authority_url = 'https://login.windows.net/common'
resource_url = 'https://analysis.windows.net/powerbi/api'
client_id = 'my client ID'
client_secret = 'my client secret'
context = adal.AuthenticationContext(authority=authority_url,
                                     validate_authority=True,
                                     api_version=None)

# get JWT access token without having to log in
token = context.acquire_token_with_client_credentials(resource_url, client_id, client_secret)

access_token = token.get('accessToken')
logs_request_url = "https://api.powerbi.com/v1.0/myorg/admin/activityevents?startDateTime=%272021-02-20T00%3A00%3A00.000Z%27&endDateTime=%272021-02-20T23%3A59%3A59.000Z%27"

header = 'Authorization': f'Bearer access_token','Content-Type': 'application/json'
response = requests.get(url=logs_request_url, headers=header).content
logs_request = json.loads(response)
# Power BI Activity Logs
print(logs_request)

这段代码给了我一个空的响应。如果我粘贴使用“试用”工具登录时生成的 access_token,它就可以工作。如果可能,我会尽量避免手动登录,因为此脚本将作为计划任务运行。我会很感激这方面的任何帮助,因为我正疯狂地试图让它发挥作用。

【问题讨论】:

【参考方案1】:

我看到您已授予该应用所需的权限。

在使用 API 之前,您需要在 Power Bi 租户级别启用以下设置(允许服务主体使用只读 Power BI 管理 API):

登录 Power BI 管理门户。

访问租户设置。

在 Admin API 设置下,您将看到允许服务主体 使用只读的 Power BI 管理 API。

启用上述设置。

您可以参考这篇文章了解详细说明。 :https://docs.microsoft.com/en-us/power-bi/admin/read-only-apis-service-principal-authentication

【讨论】:

您好,感谢您的回复。我已启用上述设置以允许服务主体使用只读 Power BI 管理 API。当我向api.powerbi.com/v1.0/myorg/admin/activityevents 执行获取请求时,我仍然得到一个空响应。如上所示,我还将开始和结束日期添加为 url 参数。我的资源 url 和权限 url 正确吗? 所以我将权限 url 更改为这个, authority_url =f 'login.microsoftonline.com' + '/tenantID' 现在我收到“应用程序无法访问 API”错误

以上是关于Power BI 活动日志 REST API 获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

Node js App 与 power bi rest Api 的集成

访问Power BI API时获取401 Unauthorized

使用身份验证将 Web API 作为数据源连接到 power bi

使用 Power 查询访问 Post Rest Api

如何将 Sumologic API 中的数据集成到 Power BI - 用户错误

Power BI Advanced编辑器如何获取SelectedRow的文本?