如何为Power BI报表生成嵌入访问令牌?支持Service Principal/AD应用或AD账号密码
Power BI嵌入访问令牌生成方案(服务主体/AD用户名密码方式)
前置准备
无论用哪种方式,你都需要先完成以下基础配置:
- 在Azure AD中注册一个应用程序(服务主体对应机密客户端,用户名密码流对应公共客户端)。
- 为该应用添加Power BI相关的API权限(例如
Report.Read.All、Workspace.Read.All等,根据嵌入需求选择),服务主体方式需要管理员对权限进行同意。 - 确保目标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
相关产品推荐
相关产品推荐

