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

如何不借助Azure AD动态获取Power BI访问令牌(React嵌入场景)

动态获取Power BI访问令牌(无需前端Azure AD交互)

核心方案

不用前端走Azure AD登录流程的话,你需要通过后端服务调用Power BI REST API生成嵌入令牌,前端React只需要从后端接口获取令牌即可完成嵌入。前端不能直接生成令牌,否则会泄露敏感凭据,带来安全风险。

具体步骤

  1. 收集Power BI资源信息

    • 从Power BI服务中提取仪表盘的工作区ID、报表ID,以及嵌入用的报表Embed URL(可在Power BI服务的"嵌入"选项卡中复制)。
  2. 后端生成嵌入令牌
    后端通过服务主体(Azure AD服务身份,仅后端使用,前端无感知)认证获取Azure AD令牌,再调用Power BI的Generate Token API生成嵌入令牌。以下是Node.js后端示例:

    const axios = require('axios');
    
    // 后端接口:生成并返回嵌入令牌
    async function getEmbedToken(req, res) {
      // 1. 获取Azure AD服务主体令牌
      const aadTokenRes = await axios.post('https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token', new URLSearchParams({
        client_id: '{你的服务主体Client ID}',
        client_secret: '{你的服务主体Client Secret}',
        scope: 'https://analysis.windows.net/powerbi/api/.default',
        grant_type: 'client_credentials'
      }));
      const aadToken = aadTokenRes.data.access_token;
    
      // 2. 调用Power BI生成嵌入令牌API
      const embedTokenRes = await axios.post(
        'https://api.powerbi.com/v1.0/myorg/groups/{工作区ID}/reports/{报表ID}/GenerateToken',
        {
          accessLevel: 'View', // 可选View/Edit等权限
          allowSaveAs: false
        },
        { headers: { Authorization: `Bearer ${aadToken}` } }
      );
    
      res.json({ token: embedTokenRes.data.token });
    }
    

    注意:服务主体需要在Power BI工作区中被授予成员/管理员权限,否则无法生成令牌。

  3. React前端获取令牌并嵌入
    在React组件中调用后端接口拿到令牌,再传入Power BI嵌入组件:

    import { useState, useEffect } from 'react';
    import { PowerBIEmbed } from 'powerbi-client-react';
    import { models } from 'powerbi-client';
    
    function EmbeddedPowerBIReport() {
      const [embedToken, setEmbedToken] = useState('');
      const embedConfig = {
        type: 'report',
        id: '{你的报表ID}',
        embedUrl: '{你的报表Embed URL}',
        accessToken: embedToken,
        settings: { panes: { filters: { visible: false } } }
      };
    
      useEffect(() => {
        // 从后端获取嵌入令牌
        fetch('/api/powerbi/embed-token')
          .then(res => res.json())
          .then(data => setEmbedToken(data.token));
      }, []);
    
      return <div>{embedToken && <PowerBIEmbed embedConfig={embedConfig} />}</div>;
    }
    
    export default EmbeddedPowerBIReport;
    

关键注意事项

  • 绝对不能在前端代码中暴露服务主体的Client ID和Client Secret,必须通过后端中转。
  • 嵌入令牌有效期:Power BI Pro容量最长24小时,专用容量可设置最长90天,可根据业务需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:05:03