1. создание токена внедрения с эффективным идентификатором не поддерживается для этого источника данных
2. для создания токена внедрения для доступа к набору данных необходимо предоставить действующую идентификацию.


Код: Выделить всё
public async Task GetReport(Guid reportId, Guid workspaceId, string username)
{
try
{
var pbiClient = await GetPowerBiClientAsync();
var report = await pbiClient.Reports.GetReportInGroupAsync(workspaceId, reportId);
var tokenRequest = new GenerateTokenRequestV2
{
Reports = new List
{
new() { Id = reportId },
},
TargetWorkspaces = new List
{
new() { Id = workspaceId },
},
Datasets = new List
{
new() { Id = report.DatasetId },
},
//Identities = new List
//{
// new() {
// Username = username,
// Roles = new List(),
// Datasets = new List { report.DatasetId },
// },
//},
};
var tokenResponse = await pbiClient.EmbedToken.GenerateTokenAsync(tokenRequest);
var embedToken = tokenResponse.Token;
return new EmbeddedReport
{
Id = report.Id.ToString(),
EmbedUrl = report.EmbedUrl,
Name = report.Name,
Token = embedToken,
};
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get report");
throw new InvalidOperationException($"Failed to get report: {ex.Message}");
}
}
private async Task
GetPowerBiClientAsync()
{
var token = await GetAccessTokenAsync();
var credentials = new TokenCredentials(token, "Bearer");
return new PowerBIClient(new Uri("https://api.powerbi.com/"), credentials);
}
private async Task GetAccessTokenAsync()
{
try
{
var app = ConfidentialClientApplicationBuilder.Create("")
.WithClientSecret("")
.WithAuthority(new Uri($"https://login.microsoftonline.com/"))
.Build();
var result = await app.AcquireTokenForClient(_scopes).ExecuteAsync();
return result.AccessToken;
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get token");
return "";
}
}
Ваша помощь очень признательна.
Подробнее здесь: https://stackoverflow.com/questions/798 ... badrequest
Мобильная версия