获取嵌入 PowerBi Angular 8 的正确令牌

分享于2023年06月29日 angular node.js powerbi-embedded 问答
【问题标题】:Getting the right token for embedding PowerBi Angular 8获取嵌入 PowerBi Angular 8 的正确令牌
【发布时间】:2023-06-28 05:57:01
【问题描述】:

我正在按照这个示例在 Angular 6 应用程序中嵌入报告。我需要花一些时间才能让它在 Angular 8 上运行。

https://www.c-sharpcorner.com/article/how-to-embed-powerbi-report-in-angular-6/

最后一件事是访问令牌。

为了获得短期令牌,我使用 Postman 和以下端点:

https://login.microsoftonline.com/38efd35e-da65-4e47-8656-876039ad15b1/oauth2/token

其中 38efd35e-da65-4e47-8656-876039ad15b1 是我的 TenantId。

我提供了 App ID 和 client_secret。资源是 https://analysis.windows.net/powerbi/api

我可以通过调用生成令牌。

报告 ID 在新工作区中。在访问控制中,将应用 ID 添加为管理员(服务主体)。在代码中,我提供了报告 ID 和组 ID。 该应用程序具有 Power Bi 服务的权限。 当我使用 Postman 中生成的令牌作为 access_token 时,Angular 控制台中显示 403 错误。

我可能做错了什么?什么不见​​了? 它是错误的承载令牌吗?我应该使用其他东西吗?

MS 没有为该过程提供清晰的分步指南。

我最好坚持使用 Javascript/typescript 堆栈,而不涉及 .NET 或 C#。

  • 你为grant_type传递了什么?当grant_type 为“authorization_code”时,您将获得一个访问令牌。当grant_type 为“refresh_token”时,它是一个刷新令牌,不能用于访问任何内容
  • 我正在传递“Client_credentials”并使用应用程序的 client_secret。
  • 当我按照您的建议进行操作时出现错误:
  • "error": "invalid_request", "error_description": "AADSTS900144: 请求正文必须包含以下参数:'code'。\r\n跟踪 ID: 05c74ad7-6b22-4a80-bea5- bffa60143700\r\n相关 ID:b97d9bcd-9a9a-46f1-a6b5-3dd9114d1510\r\n时间戳:2019-11-26 08:07:59Z",
  • 好吧,坚持使用“client_credentials”我忘了这是可能的授权类型之一。下一个问题,你为 scope 传递了什么?我认为应该是 https://powerbi.microsoft.com/.default 查看此链接以获取有关 scope 的更多详细信息@ docs.microsoft.com/en-us/azure/active-directory/develop/…

【解决方案1】:

答案是肯定的,您错过了一个步骤,即 generating embed token 使用您在 Postman 上生成的访问令牌。您需要使用嵌入令牌,而不是直接使用访问令牌来嵌入您的报告,因为您使用服务主体作为嵌入的方法。 并且您还需要提供用于嵌入到嵌入配置中的令牌类型,如下所示:

var models = window['powerbi-client'].models;
var config = {
    type: 'report',
    tokenType: models.TokenType.Embed,
    accessToken: accessToken,
    embedUrl: embedUrl,
    id: embedReportId,
    settings: {}
};

由于“服务主体”和“主用户”属于“为您的客户嵌入”,因此必须生成嵌入令牌。然而,如果您只想使用访问令牌,您可以使用“为您的组织嵌入”,用户(使用专业帐户)需要登录(如果尚未登录)以生成访问令牌。

您可以参考 this link 了解使用 Power BI 进行嵌入。

有两种类型的嵌入,你可以参考这些链接:

  1. Embedding for your organization
  2. Embedding for your customers

你也可以参考这个全新的 sample created on React technology for 'embed for your organization' embed type

【讨论】: