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

2024-04-27

我使用后端应用程序中的 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 中丢失了一条技术信息?

Edit:以下是委派的应用程序权限的屏幕截图。


AFAIK,Power BI REST API 仅支持委派权限,但不支持任何应用程序权限。您会发现azure门户中没有可用的应用程序权限。因此,Power BI REST API 不允许在没有用户身份的情况下进行客户端凭据流。相关主题here https://stackoverflow.com/questions/32341877/cant-get-client-credentials-access-token-to-authorize-power-bi and here https://stackoverflow.com/questions/35254559/client-credentials-dont-work-for-powerbi-rest-api供您参考。

如果您想从服务连接到 Power BI REST API,您可以使用资源所有者密码凭证授予流程 https://blogs.msdn.microsoft.com/wushuai/2016/09/25/resource-owner-password-credentials-grant-in-azure-ad-oauth/ .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐