Могут ли некоторые предложить помощь с проблемой Power BI Embedded на моем веб-сайте? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь использовать Power BI Embedded для создания отчета на своей веб-странице.

Я работаю над проверкой концепции и имею учетную запись Office 365 компании с пробной версией Power BI Pro. У нас также есть учетная запись azure, на которую реплицируется наш локальный Active Directory. У меня есть доступ к моей учетной записи Power BI в моем офисе 365, и я могу вносить в нее изменения, но у меня нет доступа к учетной записи Azure AD, и я должен попросить внести изменения для меня.

Я вошел в свою учетную запись Power BI, создал отчет и опубликовал его в общем рабочем пространстве. Мы также зарегистрировали приложение (наш веб-сайт) в Azure, которое указывает на URL веб-сайта

. Когда я смотрю на приложение в Azure, я вижу идентификатор приложения (клиента), каталог (арендатор) ) Идентификатор и идентификатор объекта. «URI идентификатора приложения» начинается с «api: //» и продолжается значением идентификатора приложения (клиента).

После видео, размещенного на канале 9 ( Power Bi Embedded - Настройка и начало работы ) все это выглядело очень просто, и следование кодексу парней имело смысл. Однако, как только я запустил код, который скопировал, у меня возникла ошибка при вызове AcquireTokenAsyn c (со значением параметра Reourse "https://analysis.windows.net/powerbi/api", Приложение (Клиент) ID и мои Azure учетные данные AD)

Ошибка гласит:

"AADSTS7000218: тело запроса должно содержать следующий параметр:" client_assertion "или" client_secret ". Trace ID: d0bdb825-de11-43a0-8171-f5ef2e25dd00 Идентификатор корреляции: 6dc1555b-b42b-46ea-93e5-9b1fa4c7fedd Метка времени: 2020-01-14 13: 04: 24Z "

Нет упоминания о" client_assertion "где угодно, но даже если у меня есть client_secret (я вижу это в регистрации для приложения в Azure), мне не ясно, где это будет установлено, или если это красная сельдь, и я просто надеваю приложение зарегистрировано или настроено правильно.

Я надеюсь, что кто-то еще знает, почему я вижу это, и может предложить способ исправить это, и подозреваю, что это больше связано с config (либо в Power BI или приложение Azure ).

Мой метод показан ниже

protected async void GetToken()
    {
        try
        {
            //  Config.AuthorityUrl = "https://login.windows.net/common/oauth2/authorize/"
            //  Config.ResourceUrl = "https://analysis.windows.net/powerbi/api"
            //  Config.ApiUrl = "https://api.powerbi.com/"
            //  These will be changed to use a service account later...
            //  Globals.DomainUsername = my AD account username
            //  Globals.DomainPassword = my AD account password
            //  Config.ClientID = Application (Client) ID in Azure app
            //  Config.GroupID = the Group ID taken from Power BI and matches the Application (Client) ID
            //  ReportID = the report ID taken from the Querystring when viewing report in Power BI

            var credentials = new UserPasswordCredential(Globals.DomainUsername, Globals.DomainPassword);
            var authenticationContext = new AuthenticationContext(Config.AuthorityUrl);
            var authenticationResult = await authenticationContext.AcquireTokenAsync(Config.ResourceUrl, Config.ClientID, credentials);

            if (authenticationResult == null)
            {
                throw new Exception("Could not get authenticationResult");
            }

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

            using (var client = new PowerBIClient(new Uri(Config.ApiUrl), tokenCredentials))
            {
                var report = await client.Reports.GetReportInGroupAsync(Config.GroupID, ReportID);

                if (report == null)
                {
                    throw new Exception("Could not get report");
                }

                var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                var token = await client.Reports.GenerateTokenInGroupAsync(Config.GroupID, report.Id, generateTokenRequestParameters);

                if (token == null)
                {
                    throw new Exception("Could not get token");
                }

                // global scope variables...
                reportURL = report.EmbedUrl;
                rID = report.Id;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Вам нужно будет зарегистрировать приложение как собственное приложение. Измените AuthorityUri на https://login.microsoftonline.com/common/

В соответствии с новыми изменениями в пользовательском интерфейсе для Azure регистрации приложения вам необходимо будет включить дополнительную настройку, которая называется Тип клиента по умолчанию Да.

image

Для лучшего понимания, пожалуйста, посмотрите здесь: https://github.com/Azure-Samples/active-directory-dotnetcore-devicecodeflow-v2/issues/9

0 голосов
/ 24 января 2020

Единственное, что я вижу, это то, что URL авторизации отличается.

Я бы попытался изменить AuthorityUrl на https://login.windows.net/common/ или https://login.windows.net/ {Ваш Арендатор, например, contoso.onmicrosoft.com} /

Также я бы дважды проверил, что вы добавили правильные разрешения API Power BI для регистрации приложения в Azure. У меня не было сгенерированного секрета клиента, пока мы не начали переключаться на принципала обслуживания.

...