Я пытаюсь использовать 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;
}
}