Невозможно сгенерировать токен встраивания для доступа к набору данных из-за отсутствия ролей в эффективной идентификации - PullRequest
1 голос
/ 09 мая 2019

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

Я наблюдал наборы данных. РанееIsEffectiveIdentityRequired (в приведенном ниже коде) было ложным, теперь, как и истина, я получаю ошибку - {"error": {"code": "InvalidRequest", "message": "Создание токена вставки для доступа к набору данных 02c90e15-35dd-4036-a525-4f5d158bfade требует, чтобы роли были включены в предоставленную эффективную идентификацию"}}

Я использую стандартный код службы Embed.

// Создание объекта клиента Power BI.Он будет использоваться для вызова API Power BI.

            using (var client = new PowerBIClient(new Uri(ApiUrl), m_tokenCredentials))
            {
                // Get a list of reports.
                var reports = await client.Reports.GetReportsInGroupAsync(WorkspaceId);


                Report report = reports.Value.FirstOrDefault(r => r.Id.Equals(ReportId, StringComparison.InvariantCultureIgnoreCase));

                var datasets = await client.Datasets.GetDatasetByIdInGroupAsync(WorkspaceId, report.DatasetId);
                m_embedConfig.IsEffectiveIdentityRequired = datasets.IsEffectiveIdentityRequired;
                m_embedConfig.IsEffectiveIdentityRolesRequired = datasets.IsEffectiveIdentityRolesRequired;
                GenerateTokenRequest generateTokenRequestParameters;
                // This is how you create embed token with effective identities
                // HERE username IS NULL
                if (!string.IsNullOrWhiteSpace(username))
                {
                    var rls = new EffectiveIdentity(username, new List<string> { report.DatasetId });
                    if (!string.IsNullOrWhiteSpace(roles))
                    {
                        var rolesList = new List<string>();
                        rolesList.AddRange(roles.Split(','));
                        rls.Roles = rolesList;
                    }
                    // Generate Embed Token with effective identities.
                    generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view", identities: new List<EffectiveIdentity> { rls });
                }
                else
                {
                    // Generate Embed Token for reports without effective identities.
                    generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                }

                var tokenResponse = await client.Reports.GenerateTokenInGroupAsync(WorkspaceId, report.Id, generateTokenRequestParameters);

}

Во-первых, я полностью понимаю, что эта ошибка возникает, поскольку я не передаю какую-либо идентификационную информацию.Итак, есть ли возможность отключить IsEffectiveIdentityRequired?

Во-вторых, как настроить пользователей и роли в Powerbi?- Я не эксперт PowerBI -

1 Ответ

1 голос
/ 28 мая 2019

IsEffectiveIdentityRequired - это свойство только для чтения, поэтому вы не можете управлять им, и нет возможности отключить его.

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

Если IsEffectiveIdentityRequired имеет значение true, вам нужно передать EffectiveIdentity при вызове GenerateTokenRequest для генерации токена встраивания. Если для источника данных требуется эффективная идентификация, а вы ее не передаете, при вызове GenerateTokenRequest вы получите ошибку. Вы также получите сообщение об ошибке, если передадите неполный идентификатор EffectiveIdentity, например тот, в котором отсутствуют роли при вызове GenerateTokenRequest.

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

                List<EffectiveIdentity> eil = new List<EffectiveIdentity>();
                EffectiveIdentity ef = new EffectiveIdentity();

                // UserName
                ef.Username = FullADUsername;

                // Roles
                List<string> Roles = new List<string>();

                ef.Roles = Roles;

                // Datasets
                List<string> _Datasets = new List<string>();
                _Datasets.Add(report.DatasetId);
                ef.Datasets = _Datasets;

                eil.Add(ef);

                // Look up the data set of the report and look if we need to pass an Effective Identify               
                Dataset d = client.Datasets.GetDatasetByIdInGroup(WorkspaceId, report.DatasetId);
                if (d.IsEffectiveIdentityRequired == true)
                {
                    GenerateTokenRequest gtr = new GenerateTokenRequest("View", null, false, eil);
                    newEmbedToken = client.Reports.GenerateTokenInGroup(WorkspaceId, ReportId, gtr);
                }
                else
                {
                    GenerateTokenRequest gtr = new GenerateTokenRequest();
                    newEmbedToken = client.Reports.GenerateTokenInGroup(WorkspaceId, ReportId, gtr);
                }
...