问题描述
我已经设置了专用的PowerBI功能,将服务主体作为管理员添加到工作区中,现在正尝试嵌入一个与Azure Analysis Services直接连接的报表,并作为服务主体进行身份验证。
当我尝试发布嵌入令牌时,收到一条错误消息“创建用于访问数据集的嵌入令牌[我的数据集ID]要求有效身份用户名与调用者的主体名称相同”
我正在使用Nuget的PowerBI .NET Core软件包Microsoft.PowerBI.Api,版本3.14.0尝试发布代码,这是代码:
GenerateTokenRequest generateTokenRequestParameters;
//var rls = new EffectiveIdentity(AppObjectId,new List<string> { report.DatasetId });
var rls = new EffectiveIdentity(ApplicationId,new List<string> { report.DatasetId });
rls.Roles = new string[] { "AllData" };
generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view",identities: new List<EffectiveIdentity> { rls });
var tokenResponse = await client.Reports.GenerateTokenInGroupAsync(workspaceId,report.Id,generateTokenRequestParameters);
我尝试过的事情:
- 发送与服务主体凭据(应用程序ID)完全相同的有效ID字符串
- 发送应用注册对象ID作为有效ID字符串
有什么办法可以帮助我解决此问题吗?
解决方法
这个非常简短的答案具有关键点:https://stackoverflow.com/a/59026502/139200(链接的文章不回答这个问题)
重要的一点是,您应该在AAD中获取ServicePrincipal对象的ID值,而不是应用程序注册的对象ID。
要获取ServicePrincipal ID,请使用Az PowerShell模块并运行Get-AzADServicePrincipal -ApplicationId your-application-id