2017-09-07 5 views
1

Nous avons essayé de suivre this Power BI article afin d'intégrer des rapports/tableaux de bord dans notre produit SaaS. Plus précisément, nous sommes bloqués à l'étape 3, «Créer le jeton d'intégration».Réception d'un 'Forbidden (403)' lors de la connexion à l'API Power BI

Nous sommes en mesure d'obtenir un jeton porteur très bien, mais lorsque la demande de récupérer les rapports est finalement soumis à l'API que nous recevons: Opération renvoyé un code d'état non valide « Interdit »

private static string clientId = "..."; 
    private static string secretKey = "..."; 
    private static string groupId = "..."; 

    static void Main(string[] args) 
    { 
     string resourceUri = "https://analysis.windows.net/powerbi/api"; 
     string authorityUri = "https://login.windows.net/common/oauth2/authorize"; 

     ClientCredential credential = new ClientCredential(clientId, secretKey); 
     AuthenticationContext authContext = new AuthenticationContext(authorityUri); 

     var token = authContext.AcquireTokenAsync(resourceUri, credential).Result.AccessToken; 

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

     using (var client = new PowerBIClient(new Uri("https://api.powerbi.com/"), tokenCredentials)) 
     { 
      var reports = client.Reports.GetReportsInGroupWithHttpMessagesAsync(groupId); 

      // !!! - Here's where the exception is thrown 
      // !!! -- Operation returned an invalid status code 'Forbidden' 
      var report = reports.Result.Body; 
     } 
    } 

Voici ce que nous avons essayé:

  • Les autorisations requises ont été accordées (nous avons vérifié de tous pour que nous ne sommes pas quelque chose qui manque). Cela inclut Windows Azure Active Directory/Power BI Service.
  • Nous avons confirmé que l'ID du client, la clé secrète et l'ID du groupe sont corrects.
  • L'espace de travail de Power BI est privé, mais nous avons essayé de le rendre public pour être sûr que cela n'a pas d'importance.
  • Enfin, le jeton que nous recevons via le code correspond au jeton sur powerbi.com.

Répondre

2

Vous utilisez le flux d'informations d'identification client pour acquérir un jeton pour l'API Power BI. Actuellement, l'API Power BI REST prend uniquement en charge les autorisations déléguées mais ne prend en charge aucune autorisation d'application. Votre jeton d'accès ne dispose donc pas d'un accès suffisant. Pour utiliser Power BI, l'authentification doit être basée sur un utilisateur particulier. Fil connexe here et here sont pour votre référence.

Selon votre document, le scénario est l'application possède l'accès aux données. Les utilisateurs ne seront pas nécessairement des utilisateurs de Power BI et l'application contrôle l'authentification et l'accès pour les utilisateurs finaux. Vous pouvez ensuite utiliser le flux du propriétaire de ressource pour acquérir le jeton.

Un échantillon de cette technologie est disponible dans les contrôleurs \ HomeController.cs du De l'exemple de code App Owns Data sample.

, il est acquring jeton à l'aide des informations d'identification de mot de passe de l'utilisateur, et non des titres de compétence de l'application:

  // Create a user password cradentials. 
      var credential = new UserPasswordCredential(Username, Password); 

      // Authenticate using created credentials 
      var authenticationContext = new AuthenticationContext(AuthorityUrl); 
      var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential); 

S'il vous plaît se référer à Authenticate users and get an Azure AD access token for your Power BI app et vérifiez la Access token for non-Power BI users (app owns data) se ction.

+0

Merci Nan Yu, cependant, cela obtient exactement le même jeton que j'ai obtenu dans mon échantillon. J'ai essayé l'exemple que vous avez suggéré précédemment mais j'ai reçu une erreur "Le corps de la requête doit contenir le paramètre suivant: 'client_secret ou client_assertion' Les suggestions en ligne suggèrent de créer une 'Native App', mais cela aussi me laisse une erreur (Unautorized – leemac

+0

Nous ne pouvons utiliser le flux propriétaire de la ressource d'un client natif.Un client confidentiel, comme un site Web, ne peut pas utiliser les informations d'identification de l'utilisateur direct.Quel est le message d'erreur détaillé Lorsque vous obtenez l'erreur "UnAuthorized" –

+0

Merci Nan Nous avons parlé avec un représentant de Microsoft et expliqué les détails ci-dessus un peu plus en détail pour nous.Nous avons dû utiliser une application client native et non une application Web comme indiqué dans les didacticiels. Très déroutant, mais cela semble fonctionner. Ce qui nous a décontenancés, c'est qu'il est écrit "Native (desktop/mobile/etc)" lors de l'enregistrement de l'application. – leemac

0

Nous avons constaté que le groupe (App Workspace) doit appartenir au même utilisateur qui s'authentifie avec Azure. Cet utilisateur doit également être répertorié en tant que propriétaire dans l'application Azure que vous enregistrez.