【问题标题】:Embedding report for power bi userPower bi 用户的嵌入报告
【发布时间】:2017-09-27 10:21:51
【问题描述】:

我有一份报告,我想在其中实施行级安全性。我已经准备好我的报告,现在剩下的就是将它嵌入到网页中。 为此,我创建了一个空白的 MVC 站点。 我已将我的应用程序注册到 Azure AD 并授予所有必需的权限。我没有任何大师或专业帐户。 每当用户点击 URL 时,我想提示用户登录,登录后,我想传递角色和用户名来报告以实现 RLS。

这是我的操作方法:

public async Task<ActionResult> Index()
        {
           try
            {
                AuthenticationContext AuthContext = new AuthenticationContext(AuthorityUrl, false);
                string query = "client_secret="+ClientSecret;
                AuthenticationResult AuthResult = await AuthContext.AcquireTokenAsync(ResourceUrl, ClientID, new Uri(RedirectUrl), new PlatformParameters(0), UserIdentifier.AnyUser,query);
                if (AuthResult == null)
                {
                    return View(new EmbedConfig()
                    {
                        ErrorMessage = "Authentication Failed."
                    });
                }
                var tokenCredentials = new TokenCredentials(AuthResult.AccessToken, "Bearer");
                using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
                {

                    var reports = client.Reports.GetReports();

                    var report = reports.Value[0];

                    if (report == null)
                    {
                        return View(new EmbedConfig()
                        {
                            ErrorMessage = "Workspace has no reports."
                        });
                    }

                    EffectiveIdentity effectidentity = new EffectiveIdentity(AuthResult.UserInfo.DisplayableId, new List<string>(new string[] { report.DatasetId }), new List<string>(new string[] {"Role1"}));
                    var generateTokenRequestParameters = new GenerateTokenRequest("View", report.DatasetId, false, new List<EffectiveIdentity>(new EffectiveIdentity[] { effectidentity }));

                    var tokenResponse = client.Reports.GenerateToken(report.Id, generateTokenRequestParameters);

                    if (tokenResponse == null)
                    {
                        return View(new EmbedConfig()
                        {
                            ErrorMessage = "Failed to generate embed token."
                        });
                    }

                    var embedConfig = new EmbedConfig()
                    {
                        Token = tokenResponse.Token,
                        EmbedUrl = report.EmbedUrl,
                        Id = report.Id
                    };
                    return View(embedConfig);
                }
            }
            catch(Exception ex)
            {
                return View(new EmbedConfig()
                {
                    ErrorMessage = "Failed to display report."
                });
            }
        }

AuthenticationResult AuthResult = await AuthContext.AcquireTokenAsync(ResourceUrl, ClientID, new Uri(RedirectUrl), new PlatformParameters(0)); 这一行之后,它要求提供用户凭据。

在线var tokenResponse = client.Reports.GenerateToken(report.Id, generateTokenRequestParameters); 它给出了一个异常说Operation returned an invalid status code 'Forbidden'

由于我没有任何专业用户,我无法创建组 ID。在这种情况下,我不能使用 GenerateTokenInGroup,因为我没有任何组。

在这种情况下该怎么办?

【问题讨论】:

  • 如果没有 Pro 或专用容量,您将无法做到这一点。

标签: powerbi


【解决方案1】:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
相关资源
最近更新 更多