Не удается внедрить отчет Power BI

На портале Azure я зарегистрировал приложение типа «Собственное». В Java я смог получить токен доступа, используя этот вызов API

ОТПРАВКА https://login.windows.net/common/oauth2/токен

Параметры запроса

  1. client_id: идентификатор приложения на портале Azure.
  2. Grant_type: "пароль" жестко запрограммирован
  3. ресурс: "https://analysis.windows.net/powerbi/api"
  4. имя пользователя: электронная почта
  5. пароль: пароль электронной почты

Это дает мне 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 возникает, когда процесс аутентификации неверен. Что я здесь делаю неправильно?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 356
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы пытаетесь внедрить отчет, указав неверный тип токена. В вашем коде тип токена установлен на Embed:

tokenType: models.TokenType.Embed

Хотя вы никогда не упоминаете, что такое генерируется (например, с использованием Генератетокенингрупп). Таким образом, вы, вероятно, используете токен, полученный во время начальной аутентификации. Если вы хотите использовать его, вы должны изменить тип токена на Aad:

tokenType: models.TokenType.Aad

Разница заключается в том, что токен Azure AD предоставляет доступ к пользовательским данным, отчетам, панелям мониторинга и плиткам, а токен внедрения относится только к внедренному элементу. Кроме того, токен для встраивания имеет более короткую жизнь (~ 5 минут), чем токен AAD (~ 1 час).

На самом деле я не использовал GenerateTokenInGroup, что было ошибкой с моей стороны. Я использую тип Embed Token, но не генерировал специальный токен для встраивания отчета. Спасибо

Muneeb Mirza 15.03.2019 07:43

Другие вопросы по теме