首页 > 解决方案 > 获取嵌入在 Angular 应用程序中的 Power BI 的嵌入式令牌

问题描述

我想在 Angular 上为 Power BI 生成嵌入式令牌。我目前在一个使用自己版本的 Power BI (xyz.powerbi.com) 并使用 Azure AD 进行身份验证的组织内。

采取的步骤:

  1. 向 Azure AD 应用注册添加了 Power BI 服务。授予组织访问权限。

  2. 点击身份验证端点以获取访问令牌 - https://login.microsoftonline.com/tenantId/oauth2/token,客户端 ID 和客户端密码以及资源为https://analysis.windows.net/powerbi/ api并获得了访问令牌。


我应该如何使用此访问令牌通过点击 Power Bi 端点来生成嵌入式令牌?

上述方法是生成 Azure AD 访问令牌以访问 Power BI API 的正确方法吗?

嵌入的令牌将进一步用于在应用程序中嵌入 Power BI 报告。


面临的困难: 我尝试通过点击以下 REST api 来生成 Power BI 嵌入式令牌

https://api.powerbi.com/v1.0/myorg/groups/group-id/reports/report-id/GenerateToken

通过在授权选项卡中使用从 Azure AD 生成的访问令牌和https://docs.microsoft.com/en-us/rest/api/power-bi/embedtoken/reports_generatetokeningroup中提到的相应正文

没有提供(有意的)用户名/密码组合,并且想使用 azure AD 的访问令牌来获得访问权限。

正如预期的那样,我得到了未经授权的 401。我该如何克服这个?

标签: angularazureazure-active-directorypowerbipowerbi-embedded

解决方案


/GenerateToken您收到 401 未经授权的错误,因为您在调用端点时未设置授权(值格式应为“承载 {Azure AD 的访问令牌}”)标头。

确保已在 Azure AD 应用中分配了以下委派权限: Report.ReadWrite.AllReport.Read.AllDataset.ReadWrite.AllDataset.Read.AllContent.Create

您可以在此处设置它们: 在此处输入图像描述

然后您需要使用以下请求来生成嵌入式令牌:

 POST https://api.powerbi.com/v1.0/myorg/groups/{GROUP ID}/reports/{REPORT ID}/GenerateToken
    headers = {
    Authorization: Bearer {access_token from Azure AD}
    Content-Type:application/json; charset=utf-8
    Accept:application/json
    }
    data= {
      "accessLevel": "View",
      "allowSaveAs": "false"
    }

这是示例响应:

{
    "@odata.context": "http://wabi-west-us-redirect.analysis.windows.net/v1.0/myorg/groups/{GROUP_ID}/$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.GenerateTokenResponse",
    "token": "H4sIAAAAAAA...",
    "tokenId": "...",
    "expiration": "yyyy-mm-ddTxx:xxxxx"
}

推荐阅读