客户端错误:“GET https://api.powerbi.com/v1.0/myorg/datasets”导致“401 Unauthorized”响应 Power BI REST api

问题描述

我正在尝试使用 PHP(特别是由切线解决方案制作的 SDK:https://github.com/TangentSolutions/PowerBI-SDK-PHP/)将数据推送到我正在处理的 Power BI 应用程序(进入 https://app.powerbi.com)。我能够使用 client_credentials 获取访问令牌,并且可以运行 Microsoft 放入文档中的测试 API 调用,但是在我的应用程序中,我一直收到此 401 Unauthorized 错误,只是尝试运行 API 调用获取数据集。我现在正在测试数据集调用,但我也从其他 API 调用中得到了相同的响应。在 Postman 中运行时,我也可以获得访问令牌并获得 200 响应。我已在 AAD 中正确授予权限(据我所知):

Permissions1

Permissions2

我看到有人说使用密码作为获取访问权限的一种方式,我试过了,但我仍然收到 401 Unauthorized 的回复。不过,我更愿意使用 client_credentials,所以我宁愿不走这条路。

我没有向我注册的应用程序添加任何范围,因为老实说这是我第一次使用 AAD 并且我对使用 API 还很陌生,所以我不完全确定这意味着什么或我会输入什么作为范围。我认为没有范围可能是一个问题,但同样,我能够从 Microsoft 的在线文档中运行测试 API 调用,我不确定这是否表明它应该适用于 REST API。

我能想到的唯一其他问题是我使用的是 Power BI 免费帐户,但我不确定我是否真的需要 Pro 帐户才能构建此帐户。我一直无法找到有关此问题的直接答案,但如果有人知道 https://app.powerbi.com 上的 Power BI 是否使用“嵌入式 REST API”,那么我可能只需要升级我的帐户。如果问题是我缺少其他东西,我还不想升级我的帐户。

解决方法

通常 401 错误意味着您的令牌的受众与您的 api 不匹配。使用token调用api时,会收到401未授权错误。访问令牌是根据受众发布的,因此您必须确保在请求令牌时将 scope 设置为您的 api。当然你也可以解析token,检查aud声明,确定是你要调用的api。

如果需要调用 Power BI 服务 api,则应将 https://analysis.windows.net/powerbi/api/.default 放在范围内。

enter image description here

解析token:

enter image description here