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

Acquire access token from Azure AD for native app registration (PowerBI) using client credentials

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

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);

然后使用token认证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);

client ID是注册的native app的application ID,client secret是通过给application加一个key来定义的。 再次,我获得了令牌,但现在我无法再使用它对 API 进行身份验证(HTTP 403,没有任何进一步的详细信息)。

所以我的问题是,这是一个应该首先起作用的有效场景,and/or我是否只是在 Azure 中或使用 adal4j 时遗漏了一段技术信息?

编辑:下面是委托应用权限的截图。

据我所知,Power BI REST API 仅支持委派权限但不支持任何应用程序权限。您会发现 azure portal 中没有可用的应用程序权限。因此 Power BI REST API 不允许没有用户身份的客户端凭据流。相关话题 and here供大家参考。

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