为 Angular 应用程序中嵌入的 Power BI 获取嵌入式令牌

Getting the Embedded Token for Power BI embedded in Angular Application

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

已采取的步数:

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

  2. 点击获取访问令牌的身份验证端点 - https://login.microsoftonline.com/tenantId/oauth2/token with the client id and the client secret along with the resource as 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

中提到的适当正文

没有提供(有意)username/password组合,想使用 azure AD 的访问令牌来获得访问权限。

我收到了预期的 401 未经授权。我该如何克服这个问题??

您收到 401 未授权错误,因为您没有设置授权(值格式应为 "bearer {access token from Azure AD}")header 在调用 /GenerateToken 端点时。

确保您已在 Azure AD 应用中分配以下委派权限: Report.ReadWrite.AllReport.Read.All, Dataset.ReadWrite.AllDataset.Read.All, Content.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"
}

虽然访问令牌看起来与下面提到的方式。

我使用 angular 中的 adal 库再次生成了访问令牌,并将访问令牌传递给了嵌入式 Power BI 组件,它成功了。

不需要像官方文档中提到的那样单独生成嵌入令牌。