使用 Power BI REST API 403 错误生成嵌入令牌

sel*_*man 4 azure azure-active-directory powerbi

我们目前正致力于将 Power BI 报告嵌入到我们的 Web 应用程序中。为了实现这一点,我们遵循官方 power bi 文档中的说明:

https://docs.microsoft.com/en-us/power-bi/developer/embed-service-principal#get-started-with-a-service-principal

我们在“应用拥有数据”的情况下,因此我们将使用服务主体。还有“使用主帐户访问”选项,但我找不到通过 REST API 生成令牌的方法,它只能通过提供的 .NET 示例工作,该示例与栈外不兼容。此外,在我检查过的所有示例中,令牌是从当前登录用户的安全上下文中检索的(因此不是通过 REST API)。所以“使用主账户访问”对我们来说不是一个选择。

我们一一按照上面链接中的步骤操作:

  1. 注册了一个服务器端 Web 应用程序。
  2. 在 Azure AD 中创建了一个安全组,并将我们的新服务器端 Web 应用程序添加到该组中。
  3. 为我们创建的新安全组启用服务主体(作为 power bi 管理员)。
  4. 创建并发布了我们的报告。
  5. 将服务主体作为管理员添加到我们创建的工作区(新工作区)。

在我们将报告嵌入应用程序的第 6 步中,我们遇到了问题。这是我们所做的:

  1. 为服务主体生成访问令牌。

URL:https
:
//login.microsoftonline.com/ {$tenantId}/oauth2/v2.0/token请求正文 grant_type:client_credentials
范围:https : //graph.microsoft.com/.default
client_id:${clientId} (来自我们创建的服务器端 Web 应用程序)>
client_secret:${client_secret}(来自我们创建的服务器端 Web 应用程序)
Header: Content-Type: application/x-www-form-urlencoded
Response: { "token_type": " Bearer", "expires_in": 3600, "ext_expires_in": 3600, "access_token": "eyXXXXXXXXXXXXXXXXXX ....XXX" }

  1. 使用 Power BI REST API 生成嵌入令牌

URL:
https : //api.powerbi.com/v1.0/myorg/groups/ ${groupId}/reports/${reportId}/GenerateToken(从我们拥有报告的 power bi dev 门户获取的 groupId 和 reportId)
请求美体:{ “ACCESSLEVEL”: “查看”, “allowSaveAs”: “假”}
头:内容类型:应用程序/ JSON
字符集:utf-8接受:应用/ JSON
授权:承载$ {access_token_from_step1}
响应:HTTP 403(这意味着禁止)

不幸的是,我们被困在了这一点上。我们无法生成嵌入令牌,我们将用它来将我们的报告/仪表板嵌入到我们的应用程序中。尽管我们已经浏览了大量在线文档/讨论,但我们找不到解决方案。所以这就是我们需要帮助的地方。

笔记:

- 我们正在使用 Power BI Desktop 和我们的 power bi pro 帐户创建/发布报告。(虽然我们正在尝试使用服务主体嵌入它们)

- 我们遇到了这个 stackoverflow答案,声称我们需要使用资源所有者流程而不是客户端凭据流程。但我认为,不使用任何用户/密码就可以应用服务主体的 Power bi 文档是不正确的。

Ton*_* Ju 8

您在为服务主体生成访问令牌时定义的范围不正确。

尝试使用https://analysis.windows.net/powerbi/api/.default代替https://graph.microsoft.com/.default

注意:有很多限制使用服务主体时。

  • @selman您可以在此处找到资源 uri `https://analysis.windows.net/powerbi/api/` https://learn.microsoft.com/en-us/power-bi/developer/get-azuread-access -令牌。资源参数适用于 v1.0 端点,您使用的是 v2.0 端点,因此范围应该是 `https://analysis.windows.net/powerbi/api/.default` (2认同)
  • 一直想知道为什么我在处理 azure 文档时会出现在 stackoverflow 上 (2认同)