我正在使用来自后端应用程序的 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 中的一条技术信息?
编辑:下面是委派应用权限的屏幕截图。
