public async Task <IActionResult> Report()
        {
            try
            {
                var powerBISettings = _powerBiSettings;
                var result          = new PowerBiEmbedConfig {
                    Username = powerBISettings.UserName
                };
                var accessToken = await GetPowerBiAccessToken();

                var tokenCredentials = new TokenCredentials(accessToken, "Bearer");

                using (var client = new PowerBIClient(new Uri(powerBISettings.ApiUrl), tokenCredentials))
                {
                    var workspaceId = powerBISettings.WorkspaceId;
                    var reportId    = powerBISettings.ReportId;
                    var report      = await client.Reports.GetReportInGroupAsync(workspaceId.Value, reportId);

                    var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                    var tokenResponse = await client.Reports.GenerateTokenAsync(workspaceId.Value, reportId, generateTokenRequestParameters, CancellationToken.None);

                    result.EmbedToken = tokenResponse;
                    result.EmbedUrl   = report.EmbedUrl;
                    result.Id         = report.Id.ToString();
                }

                return(View(result));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public async Task <IActionResult> GetPbiToken()
        {
            var result = new PowerBiEmbedConfig {
                Username = _powerBiSettings.UserName
            };
            var accessToken = await GetPowerBiAccessToken();

            var tokenCredentials = new TokenCredentials(accessToken, "Bearer");
            var workspaceId      = _powerBiSettings.WorkspaceId;
            var reportId         = _powerBiSettings.ReportId;

            using (var client = new PowerBIClient(new Uri(_powerBiSettings.ApiUrl), tokenCredentials))
            {
                var report = await client.Reports.GetReportInGroupAsync(workspaceId.Value, reportId);

                var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                var tokenResponse = await client.Reports.GenerateTokenAsync(workspaceId.Value, reportId, generateTokenRequestParameters);

                result.EmbedToken = tokenResponse;
                result.EmbedUrl   = report.EmbedUrl;
                result.Id         = report.Id.ToString();
            }
            return(Ok(new
            {
                result.EmbedToken.Token,
                result.EmbedToken.TokenId,
                result.EmbedToken.Expiration,
                result.EmbedUrl,
                WorkspaceId = workspaceId,
                ReportId = reportId
            }));
        }
Пример #3
0
        public ActionResult TestWithoutRls()
        {
            var reportProperties   = EmbedPowerBiReport.GetPowerBiReportProperties("TestReport");
            var embedConfig        = EmbedPowerBiReport.EmbedPbiReport(reportProperties, "Test", _loggedInUser);
            var embedConfiguration = new PowerBiEmbedConfig()
            {
                EmbedToken = embedConfig.EmbedToken,
                EmbedUrl   = embedConfig.EmbedUrl,
                Id         = embedConfig.Id
            };

            ViewBag.Title = "Test Report without RLS";

            return(View(embedConfiguration));
        }
Пример #4
0
        public static PowerBiEmbedConfig EmbedPbiReport(PowerBiReport reportProperties, string roles, string userName, bool rlsApplied = false)
        {
            var error = GetWebConfigErrors(reportProperties);

            if (error != null)
            {
                return(new PowerBiEmbedConfig()
                {
                    ErrorMessage = error
                });
            }

            // Create a user password cradentials this will be power BI owner license credential.
            var credential = new UserPasswordCredential(reportProperties.LoginUsername, reportProperties.LoginPassword);

            // Authenticate using created credentials
            var authenticationContext = new AuthenticationContext(reportProperties.AuthorityUrl);

            var authenticationResult = authenticationContext.AcquireTokenAsync(reportProperties.ResourceUrl, reportProperties.ApplicationId, credential);

            if (authenticationResult == null)
            {
                return(new PowerBiEmbedConfig()
                {
                    ErrorMessage = "Authentication Failed."
                });
            }

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

            // Create a Power BI Client object. It will be used to call Power BI APIs.
            var generateTokenRequestParameters = new GenerateTokenRequest();

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

                var report = reports.Result.Value.FirstOrDefault(x => x.Id == reportProperties.ReportId);

                if (report == null)
                {
                    return(new PowerBiEmbedConfig()
                    {
                        ErrorMessage = "WOorkspace has no reports."
                    });
                }

                EmbedToken tokenResponse;
                if (rlsApplied)
                {
                    if (userName == null && roles == null)
                    {
                        return(new PowerBiEmbedConfig()
                        {
                            ErrorMessage = "User name or user role is null."
                        });
                    }

                    generateTokenRequestParameters = new GenerateTokenRequest("View", null, identities: new List <EffectiveIdentity>
                    {
                        new EffectiveIdentity(
                            userName,
                            roles: new List <string> {
                            roles
                        },
                            datasets: new List <string> {
                            report.DatasetId
                        }
                            )
                    });

                    tokenResponse = client.Reports.GenerateTokenInGroupAsync(reportProperties.WorkspaceId, report.Id, generateTokenRequestParameters).Result;
                }
                else
                {
                    tokenResponse = client.Reports.GenerateTokenInGroupAsync(reportProperties.WorkspaceId, report.Id, generateTokenRequestParameters).Result;
                }

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

                // Generate Embed Configuration.
                var embedConfig = new PowerBiEmbedConfig()
                {
                    EmbedToken = tokenResponse,
                    EmbedUrl   = report.EmbedUrl,
                    Id         = report.Id
                };

                return(embedConfig);
            }
        }