2015-09-01 7 views
12

Ich versuche die Power BI-REST-API mithilfe eines Zugriffstokens zu verwenden, das mit der Methode "client credentials" erworben wurde, aber ich erhalte weiterhin 403 Forbidden.Zugriffstoken für Clientanmeldeinformationen zum Autorisieren von Power BI nicht möglich

Mein Code folgt dem in this AzureAD sample gezeigten Muster. In der Tat, dieses Problem zu isolieren, ich bin mit diesen Beispielcode (mit meinen eigenen Werten in der parameters.json, natürlich):

{ 
    expiresIn: 3599, 
    tokenType: 'Bearer', 
    expiresOn: Tue Sep 01 2015 16:56:07 GMT-0500 (CDT), 
    resource: '00000002-0000-0000-c000-000000000000', 
    accessToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ', 
    isMRRT: true, 
    _clientId: '[snip]', 
    _authority: 'https://login.windows.net/[snip]' 
} 

Als ich das Zugriffstoken in einer curl Anfrage verwenden, wie folgt, ich ein 403 erhalten:

curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ" 

fragen sich, ob das curl Anfrage irgendwie fehlerhaft war, ich snooped out an access token “the wrong way” via Browser webtools, und die oben funktioniert gut, eine 200 und eine JSON-Antwort zurückgibt meine Datensätze auflistet.

ich auch nicht bemerkt, dass der Return-Code 403 (verboten), nicht 401 (unberechtigte), so dass ich fragte mich, ob die Genehmigung in Ordnung war, aber die Berechtigungen auf der Seite Power-BI waren falsch. Aber ich bekomme auch 403, wenn ich irgendeinen überflüssigen Text für das Zugriffstoken verwende (z. B. Authorization: Bearer foo), also habe ich diese Theorie verworfen.

So. Ich denke, ich habe einen gültigen Test, und ich bekomme, was ich denke, ist ein gültiges Access Token (von diesem client-credentials-sample.js Code), aber es funktioniert immer noch nicht. Was vermisse ich?

+0

Senden Sie mir Ihren Code und ich debugge es für Sie http://bit.ly/emailjon. Ich bin im Power-Bi-Team. –

+2

Das ist lächerlich. Es ist die größte Mühe, eine REST Api zu benutzen, die ich je gesehen habe. Normalerweise ist es ein paar Klicks, um einen Schlüssel oder Token zu bekommen und innerhalb von Minuten können Sie Ergebnisse per Postbote erhalten. Warum kann das PBI-Team keine einfache Webseite erstellen, um die API zu aktivieren und Beispielanrufe zu generieren, die auf echten Kontoausweisen basieren, wie es viele andere tun? – Lee

Antwort

5

Mit der Hilfe von einigen Microsoft-Leuten (Dank, Jon Gallant & Josh Caplan), habe ich gelernt, dass die Authentifizierung mit einer OAuth-Client-Anmeldeinformationen fließen, wie ich tat, mit Dieses JavaScript-Beispiel bietet unzureichenden Zugriff. Um Power BI zu verwenden, muss die Authentifizierung auf einem bestimmten Benutzer basieren.

Ich habe versucht, mit:

  1. die ähnliche Probe JavaScript username-password-sample.js
  2. ein resource Wert von https://analysis.windows.net/powerbi/api (Dank, slugslog)
  3. username und password zum Hinzufügen parameters.json

Das hat mich näher gebracht, aber Ich bekam immer noch eine 400 Antwort: "error_description":"AADSTS90014: The request body must contain the following parameter: 'client_secret or client_assertion'. …".

Ein Hack zur adal-node Bibliothek (das Client-Geheimnis zu, das heißt, oauthParameters[OAuth2Parameters.CLIENT_SECRET] = "my-client-secret"; nach line 217 of token-request.js) war genug, um einen Zugriffstoken, die in den Authorization Header für meinen ursprünglichen curl Anruf arbeitet, um wieder.

Natürlich hardcoding diesen Wert in dort ist nicht meine endgültige Lösung. Ich plane sowieso nicht, die Bibliothek adal-node zu benutzen. Aber soweit dieser Beweis des Konzepts für diesen Authentifizierungsfall geht, das ist die Antwort, auf die ich kam.

+0

thanks zum teilen! –

+0

@cgrayson Haben Sie jemals eine andere Lösung dafür bekommen? Ich meine, gibt es eine andere Bibliothek, die das richtige Zugriffs-Token ausgibt? –

+0

@ VishwasShashidhar Nein, habe ich nie getan. Wir haben unsere eigenen Methoden programmiert, um die Access Tokens zu bekommen und zu benutzen. – cgrayson

2

Stellen Sie sicher, dass Ihre App, die Sie bei AAD registriert haben, die Berechtigung zum Lesen aller Datasets hat. Das sollte das Problem lösen.

+0

In Azure Active Directory befindet sich auf der Registerkarte "Konfigurieren" für diese "Anwendung" unter "Berechtigungen für andere Anwendungen" der "Power BI-Dienst". Es zeigt "Application Permissions: 0" (dieser Pfeil lässt nichts zu ändern) und "Delegated Permissions: 7" (dieses Dropdown zeigt alle aktivierten Kästchen, einschließlich "Read and Write all Datasets (preview)"). Das wurde bereits vor den oben genannten Tests festgelegt. Ich habe noch nichts geändert. Suche ich am richtigen Ort? – cgrayson

+0

Ich habe das Token geöffnet, das Sie im obigen Beispiel hatten. Ich sehe diese Berechtigungen nicht. Das erste, was Sie überprüfen müssen, ist, dass Sie die gleiche App-ID verwenden wie diejenige, die Sie in AAD eincheckten. Wenn ja, ist dies eine Web-App oder eine native App? –

+0

Hmm, ich bin mir nicht sicher, was "App ID" ist? Wo finde ich das in Azure und/oder setze es auf der Client-Seite? Ich habe meine Suche auf der 'clientId' abgeglichen, das ist das gleiche. Und das ist eine Web-App. Zumindest versucht es zu sein. :-) – cgrayson

2

Dies ist keine Antwort, sondern ein Schritt vorwärts im Debug-Prozess. Ich denke, die Ressource, für die das Token angefordert wird, sollte "" sein. Ich habe diese in mehreren Referenzen gesehen; Einer von ihnen ist unten verlinkt. Selbst nachdem ich dies geändert habe, bekomme ich immer noch eine 403. Wie das OP erwähnt, wenn wir das accessToken vom powerBI-Portal verwenden, funktioniert alles.

http://blogs.msdn.com/b/richard_dizeregas_blog/archive/2015/02/24/building-apps-with-the-new-power-bi-apis.aspx&ei=HzQDaQP3&lc=en-IN&geid=7&s=1&m=620&ts=1443608339&sig=APONPFlUC04ktQuEYWqI_VKfMqvxascf0A

+0

Ich bekomme "Server nicht gefunden", wenn ich versuche auf https://analysis.windows.net/ in irgendeiner Weise zuzugreifen. Auch nicht klar, wo Sie vorschlagen, dass die URL verwendet werden würde. Als "Behörde Host-URL" (als [hier] (https://github.com/AzureAD/azure-activedirectory-library-for-nodejs/blob/master/sample/client-credentials-sample.js#L50)? Oder als Ziel für die eigentliche BI-Anfrage (wie in meinem ursprünglichen "curl" -Beispiel)? – cgrayson

+0

das sollte der Wert der Eigenschaft "resource" sein, für die Sie das Token anfordern. Hier ist ein nodejs-Beispiel, mit dem ich arbeite. Dies ist anstelle des Werts "00000009-0000-0000-c000-000000000000", den Sie gerade verwenden. – slugslog

2

Also versuchte ich das mit meiner eigenen App, die folgenden Befehl funktioniert (für mich):

curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer ey....qqqq" 

BTW, die extra "v" nach -v überflüssig scheint.

So kann ich schließen, dass Ihre Anwendung die erforderlichen Berechtigungen zum Aufruf von Power BI-APIs fehlt.

Eine Sache, die Sie versuchen könnten, ist, eines unserer Beispiele zu nehmen, eine neue Anwendung in AAD dafür zu erstellen und dann zu sehen, ob das Autorisierungstoken dafür funktioniert. Hier ist ein guter zu versuchen: https://github.com/PowerBI/Integrate-a-tile-into-an-app

+0

Ja, Sie haben Recht mit meinem '-vv' Irgendwo entlang der Linie dachte ich,' curl' war einer von Diese Befehle erhöhen die Ausführlichkeit mit mehr 'v's, aber [nein] (http://stackoverflow.com/questions/24402473/what-is-meaning-of-vvv-option-in-curl-request). – cgrayson

Verwandte Themen