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

时间:2019-08-02 16:19:52

标签: 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 admin)以实现新的安全性 我们创建的组。
  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应用程序)
  标头:内容类型:   application / x-www-form-urlencoded
  回复:{       “ token_type”:“承载者”,       “ expires_in”:3600,       “ ext_expires_in”:3600,       “ access_token”:“ eyXXXXXXXXXXXXXXXXX .... XXX”}

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

URL:
  https://api.powerbi.com/v1.0/myorg/groups/ $ {groupId} / reports / $ {reportId} / GenerateToken(groupId和reportId从我们拥有报告的Power Bi开发门户获取)
  请求正文:{“ accessLevel”:“ View”,“ allowSaveAs”:“ false”}
  标题:内容类型:application / json
  字符集:utf-8接受:application / json
  授权:承载$ {access_token_from_step1}
  响应:HTTP 403(表示禁止访问)

不幸的是,我们在这一点上陷入了困境。我们无法生成将用于将报告/仪表板嵌入到应用程序中的嵌入令牌。尽管我们经历了许多在线文档/讨论,但仍找不到解决方案。所以这就是我们需要的帮助。

注释:

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

-我们遇到了这个stackoverflow answer,声称我们需要使用资源所有者流而不是客户端凭据流。但是我认为这违反了Power Bi文档,该文档指出可以在不使用任何用户/密码的情况下应用服务主体。

1 个答案:

答案 0 :(得分:4)

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

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

注意:使用服务主体时有许多limitations