使用Python为Power BI的Rest API检索访问令牌?

问题描述 投票:1回答:0

我正在构建一个利用 Power BI 服务的 Rest API 来构建 PBI 仪表盘的应用程序。然而,这方面的文档似乎很稀少且不完整。获取访问令牌本身并不困难。如果你去看任何PBI Rest API文档(例如. 推送数据集 - 数据集 PostDataset)并点击 "Try It",你可以在请求预览中找到一个访问令牌。困难的部分是让你的代码自动检索到正确的令牌。

我至少找到了一种方法来让它工作,但我从一个在线论坛上复制和粘贴了它,并不完全理解它,而且无法让它与应用程序密码一起工作(这是必不可少的)。那段代码是这样的。

def retrieve_access_token(email_address, password, my_org, client_id):
    import adal
    authority_url = f'https://login.microsoftonline.com/{my_org}.com'
    context = adal.AuthenticationContext(
        authority_url,
        validate_authority=True,
        api_version=None
    )

    token = context.acquire_token_with_username_password(
        resource='https://analysis.windows.net/powerbi/api',
        username=email_address,
        password=password,
        client_id=client_id
    )

    access_token = 'Bearer ' + token['accessToken']

    return access_token

我认为这段代码来自MS doc 获取一个访问令牌 (Python)但文档中没有给出 "权威 "或 "资源 "值的细节,这意味着如果你能以某种方式让它工作的话,就没有办法改变这段代码来让它更好地工作。

我已经基于YouTube视频建立了另一个函数。如何使用Postman执行Azure REST API?我认为它使用的方法与MS文档中概述的方法类似。微软身份平台和OAuth 2.0授权代码流程. 那段代码能够检索一个访问令牌,我已经用Power BI的所有可用权限配置了Azure应用注册,但它没有从PBI Rest API中得到任何响应,也不清楚令牌是干什么用的。这段代码是这样的。

def get_access_token(tenant_id, client_id, client_secret):
    url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/token"
    payload = {'grant_type': 'client_credentials',
               'client_id': client_id,
               'client_secret': client_secret,
               'resource': 'https://management.azure.com/'}
    headers = {'Cookie': 
               'fpc=Aj6jaa6czgFGoa7atKyYeA7IWmJdAQAAAPp_ctYOAAAA; x-ms-gateway-slice=prod; stsservicecookie=ests'}
    response = requests.post(url, headers=headers, data = payload)
    return 'Bearer ' + eval(response.text)['access_token']

有谁知道如何仅仅从使用代码(Python,如果可能的话)获得一个对PBI Rest API有效的访问令牌,有谁知道如何让应用程序的密码与之配合?至少可以说,从Python上做这些事情是一场艰苦的战斗,任何帮助都将是非常感激的。

注意:retrieve_access_token的my_org部分是伪代码。你必须找到你的login.microsoftonline URL才能工作。我是通过试验和错误发现的,无法指导你获得任何进一步的信息。

python oauth powerbi authorization
© www.soinside.com 2019 - 2024. All rights reserved.