web-dev-qa-db-ja.com

PowerBIを承認するためのクライアント資格情報アクセストークンを取得できません

「クライアント資格情報」メソッドで取得したアクセストークンを使用して、Power BI REST APIを使用しようとしていますが、リクエストで403 Forbiddenを取得し続けます。

私のコードは このAzureADサンプル で示されているパターンに従います。実際、この問題を切り分けるために、私はそのサンプルコードを実行しています(もちろん、parameters.jsonに自分の値を使用しています)。

{ 
  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]' 
}

次のように、そのアクセストークンをcurlリクエストで使用すると、403が取得されます。

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"

そのcurlリクエストに何らかの欠陥があるかどうか疑問に思って、私は アクセストークンを「間違った方法」でスヌープしました ブラウザのウェブツールを介して、上記は正常に機能し、200とデータセットを一覧表示するJSON応答。

また、戻りコードが403(許可されていない)ではなく401(禁止)であることに気付いたので、承認は問題ないのかと思いましたが、PowerBI側のアクセス許可が間違っていました。ただし、アクセストークンにガベージテキスト(403など)を使用するとAuthorization: Bearer fooも取得されるため、その理論を破棄しました。

そう。有効なテストがあり、有効なアクセストークン(そのclient-credentials-sample.jsコードから)と思われるものを取得していると思いますが、それでも機能しません。何が足りないのですか?

15
cgrayson

何人かのマイクロソフト関係者の助けを借りて(ありがとう、Jon Gallant&Josh Caplan)、私はOAuthそのJavaScriptサンプルで行っていたように、クライアント資格情報フローでは不十分なアクセスが提供されます。PowerBIを使用するには、認証が特定のユーザーに基づいている必要があります。

私は使ってみました:

  1. 同様のJavaScriptサンプル sername-password-sample.js
  2. https://analysis.windows.net/powerbi/apiresource値(ありがとう、slugslog
  3. usernamepasswordparameters.jsonに追加します

それは私を近づけました、しかし私はまだ400の応答を得ていました:"error_description":"AADSTS90014: The request body must contain the following parameter: 'client_secret or client_assertion'. …"

adal-nodeライブラリへのハッキング(クライアントシークレットのハードコーディング、つまり oauthParameters[OAuth2Parameters.CLIENT_SECRET] = "my-client-secret";の217行目 の後のtoken-request.js)は、機能するアクセストークンを取り戻すのに十分でした。元のAuthorization呼び出しのcurlヘッダーにあります。

もちろん、その値をハードコーディングすることは私の最終的な解決策ではありません。とにかく、adal-nodeライブラリを使用する予定はありません。しかし、この認証ケースのこの概念実証に関する限り、それが私が得た答えです。

8
cgrayson

だから私は自分のアプリでこれを試しました、次のコマンドは(私にとって)機能します:

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

ところで、-vの後の余分な「v」は冗長に見えます。

したがって、私が結論付けることができるのは、アプリケーションにPowerBIのAPIを呼び出すために必要なアクセス許可がないということです。

サンプルの1つを取得し、AADで新しいアプリケーションを作成して、認証トークンが機能するかどうかを確認することをお勧めします。試してみるのが良いでしょう: https://github.com/PowerBI/Integrate-a-tile-into-an-app

2
Lukasz P.

これは答えではありませんが、デバッグプロセスの一歩前進です。トークンが要求されるリソースは「 https://analysis.windows.net/powerbi/api "」である必要があると思います。私はこれらを複数の参考文献で見ました。それらの1つは以下にリンクされています。これを変更した後でも、403が返されます。OPが述べたように、powerBIポータルからaccessTokenを使用すると、すべてが機能します。

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

2
slugslog

AADに登録したアプリに、すべてのデータセットの読み取り/書き込み権限があることを確認してください。それで問題は解決するはずです。

2