由于缺少有效身份中的角色,因此无法生成用于访问数据集的嵌入令牌

萨吉德·伊凡

我嵌入了powerbi报告,在更改数据库之前,该报告工作正常。

我观察到数据集。IsEffectiveIdentityRequired(在下面的代码中)之前是假的,现在是正确的,我得到一个错误-{“ error”:{“ code”:“ InvalidRequest”,“ message”:“为创建嵌入令牌访问数据集02c90e15-35dd-4036-a525-4f5d158bfade要求角色包含在提供的有效身份中。“}}

我正在使用标准的嵌入服务代码。

//创建一个Power BI Client对象。它将用于调用Power BI API。

            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专家-

vvvv4d

IsEffectiveIdentityRequired是只读属性,因此您无法控制它,并且没有禁用它的选项。

根据连接到有效身份的数据源的不同,可能会也可能不需要。

如果IsEffectiveIdentityRequired为true,则在调用GenerateTokenRequest生成嵌入令牌时需要传递EffectiveIdentity。如果数据源需要有效的身份,而您没有通过身份验证,则在调用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);
                }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Discord机器人无法访问Google表格,但出现错误。请求缺少有效的API密钥

Firebase 身份验证 - Googlesheets“请求缺少有效的 API 密钥。” 错误 403

无法从GCP市场部署-缺少有效的默认服务帐户

请求缺少必需的身份验证凭据。预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据

由于缺少zsh,因此无法以root或用户身份登录

Google表格,“请求缺少有效的API密钥”

TranslateException:请求缺少有效的API密钥

由于自动生成了指针,因此无法在消息中嵌入消息

无法获取电子表格值。错误代码:403,请求缺少有效的 API 密钥

检查是否访问令牌是有效的 - 身份服务器

成功生成访问令牌后,无法在 php 中嵌入 power bi 报告的令牌

RN Firebase 实时数据库身份验证令牌有效负载

带有 Kotlin 的 Youtube Data API:请求缺少有效的 API 密钥

AzureAD的访问令牌中缺少应用程序角色

Azure AD:访问令牌中缺少角色声明

从R中的栅格堆栈有效访问数据

Google People API返回“请求缺少有效的API密钥”。

该请求缺少有效的 API 密钥 Google 搜索 API python

使用OAuth时,Google日历“请求缺少有效的API密钥”

Apache HTTP / 2客户端5.0 POST请求缺少有效负载/内容

Swift Firebase 4.0-watchSingleEvent不返回数据集(但身份验证有效)

由于服务帐户没有必要的权限,因此无法在Firebase云功能中创建自定义令牌

是否有任何新的(或至少有效的)伪3D图标集?

向Spotify请求访问令牌时出现错误“仅支持有效的承载身份验证”

访问Twitter数据-使用有效凭据的身份验证失败

在基于令牌的身份验证中,应用程序服务器如何知道哪些令牌有效?

由于缺少程序集(.NET核心),因此无法通过MetadataLoadContext检查类型

由于在缓存中未找到令牌,因此无法静默获取令牌。调用方法 AcquireToken

量角器:由于无法加载所有子元素,因此无法访问DOM中已经存在的元素