【问题标题】:Problem generating valid oauth2 token to access PowerBI APIs生成有效 oauth2 令牌以访问 PowerBI API 的问题
【发布时间】:2020-09-21 04:34:03
【问题描述】:

设置:

我正在尝试使用控制台应用程序访问基于 Azure PowerBI 的 API,因为我的公司希望通过 Suspend/Resume PBI 容量来优化成本。

已根据官方文档 API Emulator Window 成功访问这些 api,它的工作非常完美,因为它只是通过身份验证窗口询问我的 Outlook 帐户的用户名和密码,并隐式成功生成身份验证令牌。

当我尝试从我的控制台应用程序中实现调用 api 时,将自动调度触发,有一些方法可以以编程方式生成身份验证令牌。以下是我在访问 PBI API 之前用来生成相同内容的方法。

方法#1Generating token by using Azure Active Directory Authentication Libraries.

此方法要求通过 Nuget 添加 AAD 身份验证库,在添加时会失败,因为 AcquireTokenAsync 方法不接受任何参数,但教程指定了 4 个参数要输入此方法(缺少函数重载?)。所以我无法使用这种方法生成令牌。肯定是库版本问题,但official MS documentation 没有解释以上可用版本的任何内容。

方法 #2: Authorize Active Directory without dialog box StackOverflow 问题标记为答案
这种方法在调用 HTTPResponseMessage 时,它​​会被挂断,而不会进入下一行或 catch 语句。

方法 #3: 尝试使用 POSTMAN 模拟令牌生成,并在我的控制台应用程序上使用生成的令牌来检查可访问性。

这种方法可以成功生成令牌,但是在控制台应用程序中使用生成的令牌时,它会显示未经授权的令牌。

怀疑部分: 已经使用 AppRegisteration 在 Azure 中生成了 ClientID、ClientSecretID 和 TenantID,但不知道这如何与 Azure 中的 PowerBI 服务相关联。 Azure Active Directory 是否存在于 PBIService 和 AppRegisteration 之间?基于生成的 AppRegisteration 详细信息已尝试访问此身份验证 api (https://login.microsoftonline.com/tenantId/oauth2/token) 以生成令牌。这成功地生成了一个令牌,但由于对 PBI api 的未经授权的访问而不幸失败。

我错过了什么吗?将有助于解决通过控制台应用程序访问基于 PBI 的 API 的概念有什么问题。普通的 PBI 社区网站没有多大帮助。

【问题讨论】:

标签: azure api azure-active-directory powerbi


【解决方案1】:

此处描述了暂停/恢复 PowerBI API:
https://docs.microsoft.com/en-us/rest/api/power-bi-embedded/capacities/suspend
https://docs.microsoft.com/en-us/rest/api/power-bi-embedded/capacities/resume

您是否阅读了整个 Azure REST API 参考?
发送 HTTP 请求所需的所有步骤都记录在此处:
https://docs.microsoft.com/en-us/rest/api/azure/

【讨论】:

  • PBI API 文档已用于开发。最棘手的部分是 Azure AD 授权创建用于访问这些 PBI API 的令牌。
【解决方案2】:

1.如何管理 Azure Power BI Embedded 容量

如果您想使用rest API 管理 Azure Power BI Embedded 容量,请参考以下步骤。

  1. 创建服务主体并将 Azure RABC 角色分配给 sp(我使用 Azure CLI)
az login
#it will create a service principal and assign contributor role to the sp
az ad sp create-for-rbac -n "jonsp2"

  1. 获取令牌
Post https://login.microsoftonline.com/tenantId/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type =client_credentials
&client_id=<sp app id>
&client_secret=<sp app password>
&scope=https://management.azure.com/
  1. 调用 Rest API
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PowerBIDedicated/capacities/{dedicatedCapacityName}/suspend?api-version=2017-10-01

Authorization: Bearer <token>

2.如何调用 Power BI rest api

如果您想拨打Power BI rest api,请参考documentdocument

具体步骤如下

  1. 在 Azure 门户中注册 Azure AD 应用程序

  2. 配置 API 权限

  3. 测试(我在邮递员中测试) 一种。获取访问令牌

    b.调用 API

【讨论】:

  • 感谢一步一步,可以得到你的方法。您正在做的指导中的麻烦部分是配置 API 权限期间的“授予访问权限”按钮。除了作为管理员帐户之外,该按钮对我来说是禁用的。请问您是如何启用的。
  • @timblistict 请检查一下您的 Azure AD 角色:docs.microsoft.com/en-us/azure/active-directory/…
  • 感谢您正确指出角色部分。已将我的帐户设为全局管理员,它让我启用了授予访问权限按钮。但是收到的令牌为 null 而没有错误。奇怪的是我有调用 PBI Rest apis 的教程,但必须在其他教程或文档中徘徊才能实现 AAD 部分。
  • @timblistic 如果您想了解更多有关 Azure AD 的信息,请参考docs.microsoft.com/en-us/azure/active-directory/develop/…
猜你喜欢
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 2012-08-13
  • 2014-05-19
  • 2019-03-13
  • 2018-12-01
  • 2021-07-27
  • 2020-05-06
相关资源
最近更新 更多