You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Power BI报表生成嵌入访问令牌?支持Service Principal/AD应用或AD账号密码

Power BI嵌入访问令牌生成方案(服务主体/AD用户名密码方式)

前置准备

无论用哪种方式,你都需要先完成以下基础配置:

  1. 在Azure AD中注册一个应用程序(服务主体对应机密客户端,用户名密码流对应公共客户端)。
  2. 为该应用添加Power BI相关的API权限(例如Report.Read.All、Workspace.Read.All等,根据嵌入需求选择),服务主体方式需要管理员对权限进行同意。
  3. 确保目标Power BI报表所在的工作区,已为AD用户(用户名密码方式)或服务主体分配了对应权限(如查看、编辑)。

方式一:使用AD用户名密码生成嵌入令牌(用户凭据流)

这种方式直接用AD账号密码获取API访问令牌,再调用Power BI REST API生成嵌入令牌,注意:该方式不支持启用MFA的用户,且不推荐用于生产环境。

步骤1:获取Power BI API访问令牌

以C#为例,使用Microsoft.Identity.Client库实现:

using Microsoft.Identity.Client;
using System.Threading.Tasks;

var clientId = "你的Azure AD应用ID";
var tenantId = "你的Azure AD租户ID";
var username = "你的AD用户名(xxx@domain.com)";
var password = "你的AD密码";
var scopes = new[] { "https://analysis.windows.net/powerbi/api/.default" };

var publicClient = PublicClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .Build();

var authResult = await publicClient.AcquireTokenByUsernamePassword(scopes, username, password).ExecuteAsync();
var apiAccessToken = authResult.AccessToken;

步骤2:生成报表嵌入令牌

拿到apiAccessToken后,调用Power BI REST API生成嵌入令牌:

POST https://api.powerbi.com/v1.0/myorg/groups/{工作区ID}/reports/{报表ID}/GenerateToken
Authorization: Bearer {apiAccessToken}
Content-Type: application/json

{
    "accessLevel": "View" // 可选值:View、Edit、Create
}

返回结果中的token字段就是所需的嵌入访问令牌。


方式二:使用Service Principal生成嵌入令牌(服务主体流)

这是生产环境推荐的方式,无需用户交互,适合自动化场景。

步骤1:获取Power BI API访问令牌

同样用C#示例,使用Microsoft.Identity.Client库:

using Microsoft.Identity.Client;
using System.Threading.Tasks;

var clientId = "服务主体的应用ID";
var tenantId = "你的Azure AD租户ID";
var clientSecret = "服务主体的客户端密钥";
var scopes = new[] { "https://analysis.windows.net/powerbi/api/.default" };

var confidentialClient = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret)
    .Build();

var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync();
var apiAccessToken = authResult.AccessToken;

步骤2:生成报表嵌入令牌

和方式一的步骤2完全一致,用apiAccessToken调用相同的REST API即可获取嵌入令牌。


关键注意事项

  • 嵌入令牌的accessLevel要和用户/服务主体在工作区的权限匹配,否则会返回权限错误。
  • 服务主体需要在Power BI管理员门户中启用访问权限(路径:Admin portal > Tenant settings > Developer settings > Allow service principals to use Power BI APIs)。
  • 用户名密码流存在密码泄露风险,且无法应对MFA,仅适用于测试或非敏感场景。

内容的提问来源于stack exchange,提问作者Rishabh Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:57:23