我正在尝试从PowerBI API获取数据(使用Microsoft.PowerBI.Api.V2客户端dll)。以下是我的代码:
private static async Task getEmbedTokens(string accessToken)
{
var tokenCredentials = new TokenCredentials(accessToken, "Bearer");
var client = new PowerBIClient(new Uri("https://api.powerbi.com/"), tokenCredentials);
var reports = await client.Reports.GetReportsInGroupAsync("<groupid here>");
// Get the first report in the group.
var report = reports.Value.FirstOrDefault();
if (report != null)
{
var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
var tokenResponse = await client.Reports.GenerateTokenInGroupAsync("<group id here>", "<report id here>", generateTokenRequestParameters);
if (tokenResponse != null)
{
// Generate Embed Configuration.
var embedConfig = new EmbedConfig()
{
EmbedToken = tokenResponse,
EmbedUrl = report.EmbedUrl,
Id = report.Id
};
}
}
}
现在我使用ADAL生成承载令牌,我尝试了以下两种情况:
场景1:使用UserCredentials(服务帐户)生成承载令牌
这里我使用服务帐户生成承载令牌。服务帐户可以访问powerbi仪表板。
var credential = new UserPasswordCredential("username@tenantname.onmicrosoft.com", "password");
场景2:使用ClientCredentials(服务主体)获取承载令牌
这里我使用客户端ID,服务主体的客户端秘密。服务主体已获得Azure AD应用程序注册面板中Power BI API的所有权限。
var clientCred = new ClientCredential(clientId, clientSecret);
方案1工作正常,但方案2我收到了未经授权的错误。我试图检查是否有任何方法通过power bi门户网站向主板访问仪表板,但找不到任何方法。 我更喜欢使用服务主体,但可以使用服务主体吗?
答案 0 :(得分:0)
目前,Power BI不支持服务主体/应用程序令牌。