如何在C#中通过应用注册实现PowerBI工作区TOM身份验证?
前置准备
- 在Azure AD中完成应用注册,记录租户ID、客户端ID、客户端密钥
- 给应用注册添加Power BI Service权限(如
Dataset.Read.All或Workspace.Read.All),并获取管理员同意 - 安装必要NuGet包:
Microsoft.AnalysisServices.TabularAzure.Identity(用于简化服务主体令牌获取)
修改后的代码实现
using System; using Microsoft.AnalysisServices.Tabular; using Azure.Identity; namespace IrisTabularManagement { public class TabularModel { private readonly string _workspaceConnection; private readonly string _tenantId; private readonly string _clientId; private readonly string _clientSecret; private Server _server; // 从配置传入凭据(Azure函数中可通过Environment.GetEnvironmentVariable读取应用设置) public TabularModel(string workspaceName, string tenantId, string clientId, string clientSecret) { // Premium工作区的标准连接格式 _workspaceConnection = $"powerbi://api.powerbi.com/v1.0/myorg/{workspaceName}"; _tenantId = tenantId; _clientId = clientId; _clientSecret = clientSecret; _server = new Server(); Connect(); } private void Connect() { // 使用服务主体获取Power BI API的访问令牌 var credential = new ClientSecretCredential(_tenantId, _clientId, _clientSecret); var tokenRequest = new TokenRequestContext(new[] { "https://analysis.windows.net/powerbi/api/.default" }); var tokenResult = credential.GetToken(tokenRequest); // 用令牌连接到Premium工作区 _server.Connect(_workspaceConnection, tokenResult.Token); } public string GetDatasets() { var result = string.Empty; foreach (Database database in _server.Databases) { result += $"{database.Name}|"; } // 移除末尾多余的竖线(可选优化) return result.TrimEnd('|'); } } }
关键说明
- 工作区连接格式:必须使用
powerbi://api.powerbi.com/v1.0/myorg/{WorkspaceName},替换{WorkspaceName}为你的Premium工作区名称 - 凭据管理:不要硬编码租户ID、客户端ID和密钥,Azure函数中应通过应用设置存储,用
Environment.GetEnvironmentVariable("变量名")读取 - 权限范围:确保应用注册的权限足够读取数据集元数据,若需要修改操作需添加对应权限并重新授予管理员同意
内容的提问来源于stack exchange,提问作者Daniel Sanders
相关产品推荐
相关产品推荐

