2017-08-28 1 views
1

Je suis en train d'intégrer un rapport bi électrique en page Web en utilisant l'échantillon fourni par this link.Embedding Power Report Bi pour les utilisateurs non PBI

Dans cet exemple, je l'ai remplacé tous les numéros de client et mot de passe nom d'utilisateur de mon compte pro .

J'ai défini le type d'application native dans Enregistrement d'application. Quand je suis en train d'obtenir Intégrer Token, erreur suivant arrive: enter image description here

J'ai donné à la suite des autorisations à mon application: enter image description here enter image description here

Voici mon code:

public async Task<ActionResult> EmbedReport() 
     { 

      // Create a user password credentials. 
      UserPasswordCredential UserCredentials = new UserPasswordCredential(Username, Password); 
      AuthenticationContext AuthContext = new AuthenticationContext(AuthorityUrl, false); 

      // Authenticate using created credentials 
      //AuthenticationResult AuthResult = await AuthContext.AcquireTokenAsync(ResourceUrl, clientCred); 

      AuthenticationResult AuthResult = await AuthContext.AcquireTokenAsync(ResourceUrl, ClientId, UserCredentials); 

      if (AuthResult == null) 
      { 
       return View(new EmbedConfig() 
       { 
        ErrorMessage = "Authentication Failed." 
       }); 
      } 

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

      // Create a Power BI Client object. It will be used to call Power BI APIs. 
      using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials)) 
      { 
       // Get a list of reports. 
       var reports = client.Reports.GetReports(); 

       // Get the first report in the group. 
       var report = reports.Value.FirstOrDefault(); 

       if (report == null) 
       { 
        return View(new EmbedConfig() 
        { 
         ErrorMessage = "Group has no reports." 
        }); 
       } 
       string accessLevel = "View"; 
       // Generate Embed Token. 
       var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel, report.DatasetId,false); 
       var tokenResponse = client.Reports.GenerateToken(report.Id, generateTokenRequestParameters); 


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

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

       return View(embedConfig); 
      } 
     } 

Répondre

1

I pense que vous devez ajouter l'autorisation "Accéder au répertoire en tant qu'utilisateur connecté".
Je vais vous montrer comment intégrer des rapports et des tableaux de bord pour mon application pour les utilisateurs qui n'ont pas de compte Power BI.

1 - J'ai d'abord enregistré l'application en tant qu'application native.
2 - Dans le portail Azure, dans Azure Active Directory, j'accorder des autorisations pour l'application: enter image description here

3 - Ensuite, définissez les autorisations de l'application comme ceci:

enter image description here

enter image description here

Et le code que j'utilise le même comme vous.

Espérons que ça aide.

Cordialement.

+0

Et pour clarifier pour quelqu'un d'autre ... Vous vous connectez au portail et "Grant Permissions" comme l'utilisateur que vous voulez "usurper" de l'application à Power BI. Vous n'avez besoin de le faire que si vous n'avez pas d'application AAD exposée via l'interface graphique (qui vous permettrait de confirmer le consentement plus naturellement). – Jmoney38

+0

Juste une autre référence utile car cela peut être difficile à diagnostiquer: https: // github.com/Microsoft/PowerBI-Developer-Samples/issues/19 – Jmoney38