Power BI embed error 403 Запрещенная ошибка с сервера - PullRequest
0 голосов
/ 25 октября 2018

Я выполняю шаги, упомянутые в сообществе Power BI здесь , тестирую его в Postman и выполнил первые 4 шага.Однако при тестировании встраиваемого кода в Microsoft Power BI Embedded Playground я получаю следующее сообщение об ошибке:

> Json Object { "message": "LoadReportFailed", "detailedMessage": "Fail to initialize - Could not resolve cluster", "errorCode": "403", "level": 6, "technicalDetails": { "requestId": "57679585-022b-4871-ae6d-bb722d4a07cc" } }

Кроме того, при попытке альтернативного варианта настройки HTML, представленной в ШАГЕ 5, я сновапостоянно получаю сообщение об ошибке 403: «GET https://wabi -india-west-redirect.analysis.windows.net / powerbi / globalservice / v201606 / clusterdetails 403 (запрещено)»

Пожалуйста, помогите,Я пытался заставить эту штуку работать уже больше недели.

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Оказывается, что, хотя у меня были идентификатор рабочей области, идентификатор клиента, идентификатор отчета и хотя я выполнял правильные вызовы API, ошибка на пятом шаге состояла в том, что я был членом рабочей области, где находились мои отчеты.

Чтобы API работал, вы должны быть администратором рабочей области, из которой вы пытаетесь получить отчеты

0 голосов
/ 28 августа 2019

Эту проблему я, наконец, исправил, используя следующие шаги:

Для встраивания отчетов Power BI в интерфейс (angular / JS) необходимо сгенерировать 2 разных токена (для сценария только для приложения).

  1. Токен доступа с использованием основных данных учетной записи / основной учетной записи службы (используется для подключения к серверу Power BI)
  2. Встраиваемый токен (может быть создан с использованием токена доступа и .NET Power BIостальные API).

Шаг 1: Генерирование токенов доступа

PBIClientId": "xxxxxx-xxx-xxxx-xxxx-xxxxxxxxx",
    "PBIClientSecret": "<client secret>",
    "PBIApiUrl": "https://api.powerbi.com/",
    "ResourceUrl": "https://analysis.windows.net/powerbi/api",
    "AuthorityUrl": "https://login.windows.net/common/",
    "TenantId": "<TenantId>",

private async Task<string> GeneratePowerBIAccessToken()
    {
        var tenantSpecificURL = authorityUrl.Replace("common", tenantId);
        var authenticationContext = new AuthenticationContext(tenantSpecificURL);

        // Authentication using app credentials
        var credential = new ClientCredential(clientId, clientSecret);
        AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resourceUrl, credential);
        return authenticationResult.AccessToken;
    }

Шаг 2:Получить URL-адрес отчета Power BI

Пропустить маркер доступа, сгенерированный на шаге 1, groupId и reportId, полученный из URL портала Power BI.

 private async Task<EmbedModel> GetEmbedReportModel(string groupId, string reportId, string accessToken)
    {
        string restUrl = "https://api.powerbi.com/v1.0/myorg/groups/" + groupId+"/reports";

        // add JSON to HttpContent object and configure content type
        var method = new HttpMethod("GET");
        var request = new HttpRequestMessage(method, restUrl);

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);

            // send POST request to Power BI service 
            var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
            var reportObject = JsonConvert.DeserializeObject<ReportObjects>(jsonResult);
            var report = reportObject.value.Where(r => r.id == reportId).FirstOrDefault();
            return new EmbedModel { Id = report.id, EmbedUrl = report.embedUrl, Name = report.name };
        }
    }

the response you will get here is 
    {
  "value": [
    {
      "datasetId": "xxxxxx-abcasdasd-dasda-4weas",
      "id": "3asder78-asds-4d73-1232-5345dfsdfs",
      "name": "SalesMarketing",
      "webUrl": "https://app.powerbi.com/groups/xxx-xxxxx-xxx-xxxxxx-xxxxx/reports/xxxxxx-xxxx-xxx-xxxx-xxxxxxxx",
      "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=xxxxxx-xxxx-xxxx-xxxx-xxxxxx&groupId=aadasda21-xxcx-xx-xx-xxxxxx"
    }
  ]
}

шаг 3:Вызовите API для генерации встроенного токена

 private async  Task<EmbedToken> GenerateEmbedToken(string groupId, string reportId,string accessToken)
    {
        string apiURL = "https://api.powerbi.com/v1.0/myorg/groups/"+ groupId + "/reports/"+ reportId +"/GenerateToken";
        string requestBody = @"{ ""accessLevel"": ""View""}";
        HttpContent postRequestBody = new StringContent(requestBody);
        postRequestBody.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");

        // prepare PATCH request
        var method = new HttpMethod("POST");
        var request = new HttpRequestMessage(method, apiURL);
        request.Content = postRequestBody;

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);

            // send POST request to Power BI service 
            var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
            EmbedToken embedToken = JsonConvert.DeserializeObject<EmbedToken>(jsonResult);

            return embedToken;
        }
    }

Шаг 4: Используйте токен для вставки и встроенный URL в приложении переднего плана

<html>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  <script src="powerbi.min.js" type="text/javascript"> </script>
  <script type="text/javascript">
           window.onload = function () {
           var models = window['powerbi-client'].models;
          var embedConfiguration = {
               type: 'report',
			   id:'537887ee-7c7c-43c6-850b-9293f60aa3f3',
               accessToken: 'H4sIAAAAAAAEAB3Tt66EV.....phVP_a_5F15fA_FCBQAA',
               embedUrl: 'https://app.powerbi.com/reportEmbed?reportId=2376660ee-1c2c-16c6-980b-923260aa3f3&amp;groupId=2adeaaa-xxxx-xxxx-xxxx-8d13b04c6e0e&amp;w=2&amp;config=eyJjbHVzdGVyV.....',
               permissions: models.Permissions.All,
               tokenType: models.TokenType.Embed,
               viewMode:models.ViewMode.View,
           };

           var $reportContainer = $('#dashboardContainer');
           var report = powerbi.embed($reportContainer.get(0), embedConfiguration);

       }
   </script>
   <div id="dashboardContainer"></div>
</html>

Измените все значения перед запуском.

0 голосов
/ 26 октября 2018

Пожалуйста, убедитесь, что вы отправляете правильный токен в заголовке авторизации.Убедитесь, что вы используете «Носитель» в качестве заголовка авторизации.

Также убедитесь, что у вашего пользователя есть все необходимые разрешения.

...