使用服务主体对 GetReportInGroupAsync PowerBI Embedded API 调用进行未经授权的响应

2024-03-26

我正在尝试将 Power BI 报告嵌入到我的 .Net Core 应用程序中,但是我无法从请求中获得有效的响应。我正在使用 Microsoft.PowerBI.API 包和通过服务主体注册的 azure 应用程序。

据我所知,我已按照此处的说明设置了 AAD 和服务主体,并具有正确的权限:https://learn.microsoft.com/en-us/power-bi/developer/embedded/embed-service-principal https://learn.microsoft.com/en-us/power-bi/developer/embedded/embed-service-principal

我发现您必须先将 AAD/服务主体添加到安全组,然后才能将该安全组添加到 Power BI 管理门户中的管理设置。

这是我正在使用的代码片段:

var AuthorityUrl = "https://login.microsoftonline.com/common/";
var ResourceUrl = "https://analysis.windows.net/powerbi/api";

var authenticationContext = new AuthenticationContext(AuthorityUrl);
AuthenticationResult authenticationResult = null;
var credential = new ClientCredential("application_id", "application_secret");
authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, credential);

using (var client = new Microsoft.PowerBI.Api.PowerBIClient(new Uri("https://api.powerbi.com/"), new TokenCredentials(authenticationResult.AccessToken, "Bearer")))
{
    var report = await client.Reports.GetReportInGroupAsync(new Guid("workspace_id"), new Guid("report_id"));
}

我成功地从AcquireTokenAsync打电话,但是当我收到报告时,我收到了未经授权的信息。

Here are the permissions of my AAD/Service Principal in Azure: azure aad api permissions

这是我用 Fiddler 捕获的请求/响应。 要求:

GET https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/reports/{report_id} HTTP/1.1
Authorization: Bearer {access_token}
User-Agent: FxVersion/4.6.28207.03 OSName/Windows OSVersion/Microsoft.Windows.10.0.18362. Microsoft.PowerBI.Api.PowerBIClient/3.14.01300.0002
Host: api.powerbi.com

回复:

HTTP/1.1 401 Unauthorized
Content-Length: 0
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: deny
X-Content-Type-Options: nosniff
Access-Control-Expose-Headers: RequestId
request-redirected: true
home-cluster-uri: https://wabi-west-us-redirect.analysis.windows.net/
RequestId: {request_id}
Date: Thu, 10 Sep 2020 16:23:07 GMT

任何帮助,将不胜感激!


为了使服务主体适用于任何嵌入,您需要在 Power BI 管理门户中启用服务主体选项,然后将其添加到 Power BI 工作区。

请检查一次以下内容:

  1. 检查是否在 Power BI 服务的管理门户下启用了服务主体。 跟随step 3 https://learn.microsoft.com/en-us/power-bi/developer/embedded/embed-service-principal#step-3---enable-the-power-bi-service-admin-settings onwards
  2. 如果执行上述步骤后仍不起作用,请尝试与开发人员一起嵌入sample https://github.com/microsoft/PowerBI-Developer-Samples/tree/master/.NET%20Core/Embed%20for%20your%20customers

此外,根据您的代码,您似乎正在使用 ADAL 库进行身份验证。微软推荐使用 MSAL 库 https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-migration#:%7E:text=We%20now%20recommend%20using%20the,Azure%20AD%20identities用于使用 Azure AD 实体进行身份验证。
此外,您可以使用证书而不是应用程序密钥进行服务主体身份验证。 (Docs https://learn.microsoft.com/en-us/power-bi/developer/embedded/embed-service-principal-certificate)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用服务主体对 GetReportInGroupAsync PowerBI Embedded API 调用进行未经授权的响应 的相关文章

随机推荐

  • OData 中实体的别名/重命名属性

    使用ODataConventionModelBuilder和它的EntitySet lt gt 功能 是否可以重命名实体集上的属性名称 假设我有一个实体集类型 Foo 它有两个属性 Bar and Baz 但是 在我的 OData 模型中
  • Wordpress 帖子/页面标题数字排序

    有没有可能的方法按标题对新的 WordPress 帖子查询进行排序 但按数字而不是按字母顺序排序 我有一些标题 它们按字母顺序有很多相同的名称 然后有一个数字后记 所以当然 例如 WordPress 将 title12 放在 title1
  • Eclipse 插件开发 - Gradle 无法从 Eclipse 启动器运行:java.io.IOException:访问被拒绝

    我正在开发用于运行 Gradle 的 Eclipse 插件 https github com Nodeclipse nodeclipse 1 tree master org nodeclipse enide gradle从 Eclipse
  • 如何获取Windows的主题颜色?

    I would like to have a way to get the theme colour of the users Windows theme with WPF or C code behind And with this co
  • Haskell 多重上下文 - 柯里化?

    在类型签名上编写上下文时 通常我会做类似的事情 f Enum a Ord a gt a gt a 但纯粹是运气不好 我发现它的编译结果似乎是相同的 至少在 GHC 7 8 上是这样 f Enum a gt Ord a gt a gt a 两
  • 如何在 C# 中使用为 VB.Net 编写的 dll

    我有问题要问 我有一个为在 USB 上读取和写入数据而编写的 dll 文件 要在 VB Net 中使用 dll 需要集成一个 vb 文件 该文件的接口为 该 dll 文件使用其函数 属性等 我需要的是在 C 项目中使用这个 dll 这可能吗
  • 泛型 C# 的重载运算符[重复]

    这个问题在这里已经有答案了 我想创建一个支持连接到另一个过程的过程类 如下所示 a b c d 这应该导致过程采用 a 的输入类型 并给出 d 的输出类型 class Procedure
  • 如何在 MS Graph 中检索 DriveItems 的自定义列

    我正在尝试使用 Graph API 检索 Sharepoint 文档库中的文件层次结构 由于文档库存储在 驱动器 中 将其称为 OneDrive 在技术上是否正确 我使用的是 drives端点来获取文件列表 如下所示 https graph
  • 多核ARM cpu上的中断如何工作

    这个问题已经针对 x86 得到了解答 但是 我找不到太多关于 ARM MP cpu 如 Cortex A9 Cortex A15 等 的信息 更重要的是我想知道是否可以在非主CPU上引发中断而无需任何配置等 我正在开发一款仅处理主 cpu
  • 确定 gcry_cipher_decrypt 解密数据的大小?

    我使用的是 AES GCM 但以下是其他模式 如 AES CBC 的一般问题 我有以下电话libgcrypt define COUNTOF x sizeof x sizeof x 0 define ROUNDUP x b x x b 1 b
  • Android - 创建自定义 SearchView

    我有一个列表活动 其中包括 SearchView 和 ListView 我希望 SearchView 类似于谷歌地图 Android 应用程序中的内容 目前我在activity main xml中的SearchView代码是
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • 将 margin-bottom 添加到页脚之前的图像

    我想看看是否有办法添加margin bottom to an img仅当元素后跟一个footer元素 目前我正在使用一个特殊的类 image before footer 在我最后一次img元素来实现这一点 但想知道是否有办法在 CSS 中动
  • 有没有人能够成功使用 albahari.com 的 PredicateBuilder 来对抗 MongoDB?

    我使用 albahari com 中流行的 PredicateBuilder 编写了以下代码 var predicate PredicateBuilder False
  • 增加tomcat 7中的并发连接数

    想知道如何增加tomcat 7中的并发连接数 我做了一些研究 从apache文档中发现 设置acceptCount maxConnections的值并增加maxThreads可以做到这一点 但是当尝试时 我只能提交500个请求1000 下面
  • 多字段匹配查询

    我对弹性搜索相当陌生 想编写一个涉及两个字段的查询 我的意思是字段的内容包含指定的子字符串 我有一个包含字段的文档 如下所示 name n tag t 我试过这个 search d query match name n tag t 但查询结
  • androidx.legacy:legacy-support-v4: 依赖有什么用

    我正在实现 Android Room 数据库 在其中一篇教程中我发现了使用androidx legacy legacy support v4 1 0 0依赖性 谁能告诉我这种依赖关系的用途 androidx legacy legacy su
  • Linux 上的 PHP 和 RAW Sockets

    做一个就足够了 sudo setcap cap net raw eip usr bin php5 能够在 Linux 中的 PHP 而不是 CLI 中使用 RAW SOCKETS 吗 如果是 那么它不起作用 但开始在 CLI 中工作但不使用
  • 如何在 C# 中解析 HTTP url?

    我的要求是解析 Http URL 并相应地调用函数 在我当前的实现中 我使用嵌套的 if else 语句 我认为这不是一种优化的方式 您能建议其他一些有效的方法吗 网址是这样的 server func1 server func1 SubFu
  • 使用服务主体对 GetReportInGroupAsync PowerBI Embedded API 调用进行未经授权的响应

    我正在尝试将 Power BI 报告嵌入到我的 Net Core 应用程序中 但是我无法从请求中获得有效的响应 我正在使用 Microsoft PowerBI API 包和通过服务主体注册的 azure 应用程序 据我所知 我已按照此处的说