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

集成窄播显示屏:能否生成无需登录的Power BI嵌入令牌?

Power BI无需登录的嵌入令牌实现方案

可行性确认

完全可行,你需要使用**App Owns Data(Embed for your customers)**模式,该模式专为无Power BI账户的外部用户设计,生成的嵌入令牌可直接在浏览器中加载仪表板/报表,无需登录。

核心场景与关键端点

目标场景

选择App Owns Data模式:应用本身拥有Power BI资源的访问权限,通过后端生成嵌入令牌,前端使用令牌直接嵌入,无需用户登录。

关键API端点

  1. 获取Azure AD应用访问令牌

    • 端点:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
    • 认证方式:客户端凭据流(Client Credentials Flow),需使用Azure AD应用的客户端ID和密钥。
    • 所需权限:申请Power BI Service的应用权限(而非委托权限),如Report.Read.All、Dashboard.Read.All(按需申请最小权限,降低审批难度)。
  2. 生成Power BI嵌入令牌

    • 报表嵌入令牌端点:POST https://api.powerbi.com/v1.0/myorg/groups/{group-id}/reports/{report-id}/GenerateToken
    • 仪表板嵌入令牌端点:POST https://api.powerbi.com/v1.0/myorg/groups/{group-id}/dashboards/{dashboard-id}/GenerateToken
    • 请求体参数:{ "accessLevel": "View" },无需指定用户信息,生成的令牌适用于所有无登录用户。

权限审批与配置要点

  • 确保Azure AD应用已被管理员授予应用权限(提前提交权限审批申请,说明仅用于窄播显示屏的只读访问,申请最小必要权限)。
  • 将Azure AD应用添加到目标Power BI工作区,权限设置为Viewer,确保应用能访问对应仪表板/报表。

实现示例(Node.js)

1. 获取Azure AD令牌

const axios = require('axios');

async function getAzureADToken() {
  const tenantId = '你的租户ID';
  const clientId = '你的Azure AD应用ID';
  const clientSecret = '你的Azure AD应用密钥';
  const resource = 'https://analysis.windows.net/powerbi/api';

  const response = await axios.post(
    `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`,
    null,
    {
      params: {
        grant_type: 'client_credentials',
        client_id: clientId,
        client_secret: clientSecret,
        scope: `${resource}/.default`
      }
    }
  );
  return response.data.access_token;
}

2. 生成Power BI嵌入令牌

async function generateEmbedToken(azureADToken, groupId, reportId) {
  const response = await axios.post(
    `https://api.powerbi.com/v1.0/myorg/groups/${groupId}/reports/${reportId}/GenerateToken`,
    { accessLevel: 'View' },
    { headers: { Authorization: `Bearer ${azureADToken}` } }
  );
  return response.data.token;
}

3. 前端嵌入(Power BI JS SDK)

<div id="dashboardContainer" style="width: 100%; height: 800px;"></div>
<script src="https://microsoft.github.io/PowerBI-JavaScript/dist/powerbi.min.js"></script>
<script>
  const embedConfig = {
    type: 'dashboard',
    id: '你的仪表板ID',
    embedUrl: '你的仪表板嵌入URL(可从Power BI门户或API获取)',
    tokenType: 1, // 代表EmbedToken类型
    accessToken: '后端生成的嵌入令牌'
  };
  const container = document.getElementById('dashboardContainer');
  powerbi.embed(container, embedConfig);
</script>

解决当前实验问题

  • 隐身模式需登录:你之前使用的是Embed for your organization(组织内用户嵌入)模式,该模式要求用户登录Power BI账户,切换到App Owns Data模式即可解决。
  • OAuth弹窗要求管理员审批:你误用了委托权限的认证流,切换到客户端凭据流(应用权限),并提前完成管理员权限审批,即可避免弹窗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:05:13