3

バックエンドアプリケーションからadal4j(バージョン1.2.0)を使用してPowerBI REST APIを使用してレポートを埋め込むアクセストークンを取得しています(具体的には、GenerateTokenメソッド)。 Azureにネイティブアプリを登録し、必要な権限を与えました。クライアントの資格情報を使用して、Azure ADからネイティブアプリ登録(PowerBI)のアクセストークンを取得する

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/TENANT_ID/oauth2/authorize", false, es); 
Future<AuthenticationResult> f = ac.acquireToken("https://analysis.windows.net/powerbi/api", CLIENT_ID, USERNAME, PASSWORD, null); 

をそして成功したAPIへの認証にトークンを使用し、最終的に埋め込まれたレポートを示しています。私は次のようにユーザー名/パスワードの組み合わせを使用してアクセストークンを取得することができます。しかし、私のケースでは、もちろん、ユーザーアカウントの代わりにクライアントの資格情報(クライアントID、クライアントの秘密)を使用したいと思います。

AuthenticationContext("https://login.windows.net/TENANT_ID/oauth2/authorize", false, es); 
ClientCredential cc = new ClientCredential(CLIENT_ID, CLIENT_SECRET); 
Future<AuthenticationResult> f = ac.acquireToken("https://analysis.windows.net/powerbi/api", cc,null); 

クライアントIDが登録ネイティブアプリのアプリケーションIDであり、クライアントの秘密は、アプリケーションにキーを追加することによって定義されます。次のように私は再びトークンを取得することができます。 もう一度トークンを取得しましたが、今度はそれをAPIに対して認証するのにもう使用できません(HTTP 403、これ以上の詳細はありません)。

私の質問は、最初はうまくいくはずですが、Azureやadal4jを使って技術情報が欠落していますか?

編集:以下は委任されたアプリのアクセス許可のスクリーンショットです。

enter image description here

+0

取得したトークンを確認しましたか? jwt.ioのようなサイトを使って、その内容を調べることができます。しかし、PBI REST APIは以前に作業したときから変更されていない限り、委任された呼び出しのみを許可しました。つまり、ユーザーのコンテキストで実行する必要があります。 – juunas

+0

@ juunasチップをありがとう。私はすでにトークンのタイプと有効期限が認証結果からOKであることを確認し、jwt.ioは両方のトークンが有効であることを示しています。ユーザー名とパスワードの組み合わせで生成されたものは、ペイロードにはるかに多くの情報が含まれていますが、具体的にはユーザーアカウントに関するものです。これはおそらく委任された呼び出しのみが許可されているというあなたの主張を支持するでしょう。これについての見積もりを取ろうとする必要がありますが、それが本当である場合は、パスワードが失効しない専用アカウントを作成するオプションがあると思いますが、少し残念です。 –

+0

アプリケーションのみの認証の結果、アプリに与えられた役割がいくつかある場合は、トークンにロールが含まれている必要があります(アプリの権限とも呼ばれます)。委任された呼び出しには、トークンに "スコープ"(scpの主張)があります。 – juunas

答えて

3

私の知る限り、パワーBI REST APIが唯一の委任権限をサポートしていますが、任意のアプリケーションのパーミッションをサポートしていません。 azureポータルでは、アプリケーション権限がありません。したがって、Power BI REST APIでは、ユーザーIDなしでクライアントの資格情報のフローは許可されません。関連するスレッドherehereは参照用です。

サービスからPower BI REST APIに接続する場合は、Resource Owner Password Credentials Grant flowを使用できます。

+0

ええ、無人通話を可能にするのはパスワード許可だけです。しかしOPは、パスワードが期限切れでなく、MFAなどがないことを確かめなければならない。 – juunas

+0

おかげさまで、正当なシナリオに関する私の元の質問に答えられたと思う。 –

+0

はい、@ juunasが言っているように、リソース所有者のフローにはいくつかの制限があります。[this blog](http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to- authenticate-users-via-usernamepassword /)を参照してください。 –

関連する問題