401 - Несанкционированная ошибка во время обновления набора данных PowerBI

Я пытаюсь обновить набор данных для отчета PowerBI. Я создал шлюз и могу обновить набор данных с портала администратора. Я мог проверить, что обновление успешно выполнено из пользовательского интерфейса, то есть столбца последнего обновления на портале администратора. Но когда я пытаюсь выполнить обновление из кода C # webapi, я получаю указанную ниже ошибку.

Error Message:
The remote server returned an error: (401) Unauthorized.

Stack Trace:
   at System.Net.HttpWebRequest.GetResponse()
   at BlueSkyPowerBIService.Controllers.PowerBIController.<RefreshDatasetsForReports>d__13.MoveNext() in C:\Krishnan\RSI\SourceCode\Bluesky Developement\BlueSky Development\BlueSkyPowerBIService\BlueSkyPowerBIService\Controllers\PowerBIController.cs:line 258

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

Найдите мой код, который я использую для обновления данных

List<ReportDetails> reportDetailsList = new List<ReportDetails>();

            var result = new EmbedConfig();
            ReportDetails reportDetails = new ReportDetails();
            try
            {
                result = new EmbedConfig { Username = username, Roles = roles };
                var error = GetWebConfigErrors();
                if (error != null)
                {
                    result.ErrorMessage = error;
                    //return View(result);
                    return null;
                }
                var credential = new UserPasswordCredential(Username, Password);

                var authenticationContext = new AuthenticationContext(AuthorityUrl);
                var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);

                if (authenticationResult == null)
                {
                    result.ErrorMessage = "Authentication Failed.";
                    //return View(result);
                    return null;
                }

                var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");

                // Create a Power BI Client object. It will be used to call Power BI APIs.
                using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
                {
                    // Get a list of reports.
                    var reports = await client.Reports.GetReportsAsync();
                    for (int index = 0; index < reports.Value.Count; index++)
                    {
                        reportDetails = new ReportDetails();
                        Report report = reports.Value[index];

                        HttpWebRequest request;

                        if (report.Id == "6317f207-57d3-4f5f-9644-18bfbb9bef99")
                        {
                            var url = "https://api.powerbi.com/v1.0/myorg/groups/{0}/datasets/{1}/refreshes";
                            request = System.Net.HttpWebRequest.CreateHttp(String.Format(url, GroupId, report.DatasetId));

                            request.KeepAlive = true;
                            request.Method = "POST";
                            request.ContentLength = 0;

                            request.Headers.Add("Authorization", String.Format("Bearer {0}", authenticationResult.AccessToken));

                            using (Stream writer = request.GetRequestStream())
                            {
                                var response = (HttpWebResponse)request.GetResponse();
                                Console.WriteLine("Dataset refresh request{0}", response.StatusCode.ToString());
                            }
                        }
                    }//end for(int index=0; index< reports.Value.Count; index++)
                    return reportDetailsList;
                }
            }
            catch (HttpOperationException exc)
            {
                result.ErrorMessage = string.Format("Status: {0} ({1})\r\nResponse: {2}\r\nRequestId: {3}", exc.Response.StatusCode, (int)exc.Response.StatusCode, exc.Response.Content, exc.Response.Headers["RequestId"].FirstOrDefault());
            }
            catch (Exception exc)
            {
                result.ErrorMessage = exc.ToString();
            }

Я предоставил все необходимые разрешения на портале Azure в разделе "Регистрация приложений",  введите описание изображения здесь

Есть идеи, почему я получаю эту ошибку? Как исправить эту проблему?


person Krishnan    schedule 06.06.2018    source источник


Ответы (1)


Это похоже на неправильную конфигурацию разрешений приложения Azure Active Directory, которое вы используете для выполнения обновления. Как показано здесь, нам необходимо зарегистрировать собственное приложение. и объявить некоторые разрешения для доступа к API отдыха Power BI.

Убедитесь, что у этого приложения есть Dataset.ReadWrite.All разрешение. Вы можете просматривать и даже изменять разрешения приложения на портале Azure в разделе Azure Active Directory -> App Registrations. Если вы не видите приложение, выберите All apps из раскрывающегося списка справа.

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

введите здесь описание изображения

person xabikos    schedule 06.06.2018
comment
спасибо за ваш ответ, я знаю об этом и уже предоставил все разрешения для службы Power BI (Microsoft.Azure.AnalysisServices) и Windows Azure Active Directory. (См. Снимок, который я прикрепил к своему сообщению) Несмотря на это, я получаю эту ошибку. Следовательно, я опубликовал эту проблему, есть какие-либо мысли, почему я получаю эту ошибку? - person Krishnan; 06.06.2018
comment
@Krishnan Я думаю, что регистрация приложения не предоставила разрешения для правильного API. Я обновил скриншот своего ответа. Как вы можете видеть в нашем случае, API говорит только Power BI Service, а в разрешении доступа снова говорит Power BI service. В том, что вы разместили, упоминается Analysis Services. Не могли бы вы попробовать? - person xabikos; 07.06.2018
comment
У меня такая же проблема. Вы когда-нибудь решали это? Благодарность - person resolver101; 15.02.2019
comment
Пожалуйста, обратитесь к моему сообщению по ссылке stackoverflow.com/a/51228559/6167659 Я написал статью о том, как настроить разрешения и шаги для обновления набора данных. - person Krishnan; 30.04.2019