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 })); }
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)); }
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); } }