「クライアント資格情報」メソッドで取得したアクセストークンを使用して、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
コードから)と思われるものを取得していると思いますが、それでも機能しません。何が足りないのですか?
何人かのマイクロソフト関係者の助けを借りて(ありがとう、Jon Gallant&Josh Caplan)、私はOAuthそのJavaScriptサンプルで行っていたように、クライアント資格情報フローでは不十分なアクセスが提供されます。PowerBIを使用するには、認証が特定のユーザーに基づいている必要があります。
私は使ってみました:
https://analysis.windows.net/powerbi/api
のresource
値(ありがとう、slugslog)username
とpassword
をparameters.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
ライブラリを使用する予定はありません。しかし、この認証ケースのこの概念実証に関する限り、それが私が得た答えです。
だから私は自分のアプリでこれを試しました、次のコマンドは(私にとって)機能します:
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
これは答えではありませんが、デバッグプロセスの一歩前進です。トークンが要求されるリソースは「 https://analysis.windows.net/powerbi/api "」である必要があると思います。私はこれらを複数の参考文献で見ました。それらの1つは以下にリンクされています。これを変更した後でも、403が返されます。OPが述べたように、powerBIポータルからaccessTokenを使用すると、すべてが機能します。
AADに登録したアプリに、すべてのデータセットの読み取り/書き込み権限があることを確認してください。それで問題は解決するはずです。