使用客户端凭据从Azure AD获取本机应用程序注册(PowerBI)的访问令牌

时间:2017-06-21 05:44:14

标签: azure authentication azure-active-directory powerbi adal4j

我正在从后端应用程序使用adal4j(版本1.2.0)来获取访问令牌,以便能够使用PowerBI REST API嵌入报告(更具体地说,GenerateToken方法)。我在Azure中注册了一个本机应用程序,并为其提供了必要的权限。我可以使用用户名/密码组合获取访问令牌,如下所示:

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

1 个答案:

答案 0 :(得分:3)

AFAIK,Power BI REST API仅支持委派权限,但不支持任何应用程序权限。您将在azure门户中找不到应用程序权限。因此,Power BI REST API不允许客户端凭据流而无需用户身份。相关主题herehere仅供参考。

如果要从服务连接到Power BI REST API,可以使用Resource Owner Password Credentials Grant flow