На портале Azure я зарегистрировал приложение типа «Собственное». В Java я смог получить токен доступа, используя этот вызов API
ОТПРАВКА https://login.windows.net/common/oauth2/токен
Параметры запроса
Это дает мне accessToken и refreshToken. Я могу использовать этот accessToken для вызова любого API Power BI. Например, получить все отчеты, клонировать отчеты, создать наборы данных и т. д.
Теперь я хочу встроить отчет на свою веб-страницу, и я использую этот API с помощью jquery.
function embedPBIReport(txtAccessToken, embedUrl, embedReportId, mode) {
// Read embed URL from textbox
var txtEmbedUrl = embedUrl;
// Read report Id from textbox
var txtEmbedReportId = embedReportId;
// Get models. models contains enums that can be used.
var models = window['powerbi-client'].models;
// We give All permissions to demonstrate switching between View and Edit mode and saving report.
var permissions = mode == 1 ? models.Permissions.Read : models.Permissions.ReadWrite ;
var viewMode = mode == 1 ? models.ViewMode.View : models.ViewMode.Edit;
// Embed configuration used to describe the what and how to embed.
// This object is used when calling powerbi.embed.
// This also includes settings and options such as filters.
// You can find more information at https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details.
var config = {
type: 'report',
tokenType: models.TokenType.Embed,
accessToken: txtAccessToken,
embedUrl: txtEmbedUrl,
id: txtEmbedReportId,
permissions: permissions,
viewMode: viewMode,
settings: {
filterPaneEnabled: false,
navContentPaneEnabled: true
}
};
// Get a reference to the embedded report HTML element
var embedContainer = $('#reportContainer');
// Embed the report and display it within the div container. --> -->
var report = embedContainer.powerbi(config);
}
Когда я инициирую встраивание на веб-страницу, он создает Iframe и показывает значок Power BI в качестве загрузчика, а затем выдает эту ошибку
{"message":"LoadReportFailed","detailedMessage":"Get report failed","errorCode":"403","level":6,"technicalDetails":{"requestId":"f62b4819-7cd0-1c6d-1af0-a89050881a8a"}}
Я гуглил эту проблему, и люди говорят, что 403 возникает, когда процесс аутентификации неверен. Что я здесь делаю неправильно?




Похоже, вы пытаетесь внедрить отчет, указав неверный тип токена. В вашем коде тип токена установлен на Embed:
tokenType: models.TokenType.Embed
Хотя вы никогда не упоминаете, что такое генерируется (например, с использованием Генератетокенингрупп). Таким образом, вы, вероятно, используете токен, полученный во время начальной аутентификации. Если вы хотите использовать его, вы должны изменить тип токена на Aad:
tokenType: models.TokenType.Aad
Разница заключается в том, что токен Azure AD предоставляет доступ к пользовательским данным, отчетам, панелям мониторинга и плиткам, а токен внедрения относится только к внедренному элементу. Кроме того, токен для встраивания имеет более короткую жизнь (~ 5 минут), чем токен AAD (~ 1 час).
На самом деле я не использовал GenerateTokenInGroup, что было ошибкой с моей стороны. Я использую тип Embed Token, но не генерировал специальный токен для встраивания отчета. Спасибо