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

Unauthorized response on GetReportInGroupAsync PowerBI Embedded API call using Service Principal

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

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

我发现你必须先将 AAD/Service 主体添加到安全组,然后再将该安全组添加到 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 调用中取回了令牌,但是在收到报告时我得到了未经授权。

以下是我的 AAD/Service Principal 在 Azure 中的权限:

这是我用 Fiddler 捕获的 Request/Response。 要求:

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 之后
  2. 如果在执行上述步骤后仍然无法正常工作,请尝试与开发人员一起嵌入 sample

此外,根据您的代码,您似乎正在使用 ADAL 库进行身份验证。 Microsoft recommends to use MSAL library 用于使用 Azure AD 实体进行身份验证。
此外,您可以使用证书而不是应用程序密码来进行服务主体身份验证。 (Docs)

我正在尝试在这里做完全相同的事情: .
而且我仍然无法正常工作。如果我正在登录我的应用程序,而不是特定用户,那么需要将哪个组或用户添加到 power bi 工作区?添加应用程序没有选项