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

Azure Function(PowerShell)调用Power BI REST API的认证方案咨询

Azure Function调用Power BI REST API的最佳认证方案:托管标识 vs 应用注册

两种方式均可行,具体选型取决于你的场景需求,以下是详细说明与实现步骤:

一、托管标识(推荐)

托管标识是Azure原生的无凭据认证方式,无需手动管理密钥或证书,由Azure自动轮换凭据,安全性更高,运维成本更低。

实现步骤

  • 为你的Azure Function启用系统分配托管标识或用户分配托管标识(系统分配更简单,仅绑定当前Function)
  • 在Power BI管理员门户中,将该托管标识添加为Power BI管理员角色(因为你调用的是admin/dataflows接口,必须具备管理员权限)
  • PowerShell代码中获取访问令牌并调用API:
    # 获取托管标识的Power BI API访问令牌
    $resourceUri = "https://analysis.windows.net/powerbi/api"
    $tokenAuthUri = $env:IDENTITY_ENDPOINT + "?resource=$resourceUri&api-version=2019-08-01"
    $tokenResponse = Invoke-RestMethod -Uri $tokenAuthUri -Headers @{"X-IDENTITY-HEADER" = $env:IDENTITY_HEADER} -Method Get
    $accessToken = $tokenResponse.access_token
    
    # 调用Power BI Admin Dataflows接口
    $apiUri = "https://api.powerbi.com/v1.0/myorg/admin/dataflows"
    $headers = @{ "Authorization" = "Bearer $accessToken" }
    $dataflows = Invoke-RestMethod -Uri $apiUri -Headers $headers -Method Get
    

二、Azure应用注册

应用注册适用于需要跨多个Azure资源访问、或需要更灵活权限配置(如跨租户访问)的场景,但需要手动维护客户端密钥或证书。

实现步骤

  • 在Azure AD中创建应用注册,记录客户端ID、租户ID,生成并保存客户端密钥(建议用Azure Key Vault存储密钥,避免明文暴露)
  • 在Power BI管理员门户中,为该应用注册分配Power BI管理员角色
  • 在Azure Function的应用设置中添加租户ID、客户端ID、密钥的环境变量(如PBI_TENANT_ID、PBI_CLIENT_ID、PBI_CLIENT_SECRET)
  • PowerShell代码中获取访问令牌并调用API:
    # 从环境变量读取应用注册信息
    $tenantId = $env:PBI_TENANT_ID
    $clientId = $env:PBI_CLIENT_ID
    $clientSecret = $env:PBI_CLIENT_SECRET
    
    # 获取客户端凭据模式的访问令牌
    $tokenUri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
    $tokenBody = @{
        grant_type    = "client_credentials"
        client_id     = $clientId
        client_secret = $clientSecret
        scope         = "https://analysis.windows.net/powerbi/api/.default"
    }
    $tokenResponse = Invoke-RestMethod -Uri $tokenUri -Method Post -Body $tokenBody -ContentType "application/x-www-form-urlencoded"
    $accessToken = $tokenResponse.access_token
    
    # 调用Power BI Admin Dataflows接口
    $apiUri = "https://api.powerbi.com/v1.0/myorg/admin/dataflows"
    $headers = @{ "Authorization" = "Bearer $accessToken" }
    $dataflows = Invoke-RestMethod -Uri $apiUri -Headers $headers -Method Get
    

选型建议

  • 优先使用托管标识:符合Azure安全最佳实践,无需维护凭据,降低泄露风险,减少运维工作
  • 选择应用注册的场景:需要跨租户访问Power BI API、或需要使用证书认证替代密钥、或需要同一标识访问多个不同类型的Azure服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:25