Python 客户凭证don';PowerBIRESTAPI不能工作

Python 客户凭证don';PowerBIRESTAPI不能工作,python,rest,authentication,adal,powerbi,Python,Rest,Authentication,Adal,Powerbi,我正在尝试实现守护进程身份验证流。 以下post请求返回具有正确作用域的访问令牌: p_url = 'https://login.microsoftonline.com/' + 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' + '/oauth2/token' data = { 'grant_type':'client_credentials', 'client_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

我正在尝试实现守护进程身份验证流。 以下post请求返回具有正确作用域的访问令牌:

p_url = 'https://login.microsoftonline.com/' + 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' + '/oauth2/token'
data = { 'grant_type':'client_credentials',
         'client_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
         'client_secret': 'L------------------------------------------=',
         'resource':'https://analysis.windows.net/powerbi/api' }
r = requests.post(url=p_url, data=data)
我收到以下答复

{
  "access_token" : "ey------------"
  "expires_on" : "1454857253",
  "not_before" : "1454853353",
  "expires_in" : "3600",
  "token_type" : "Bearer",
  "scope" : "Dashboard.Read.All Data.Alter_Any Dataset.Read.All Dataset.ReadWrite.All Report.Read.All",
  "resource" : "https://analysis.windows.net/powerbi/api"
}

response = json.loads(r.text)
token = response['access_token']
headers = { 'Authorization': 'Bearer ' + token }
response = requests.get('https://api.powerbi.com/v1.0/myorg/datasets', headers=headers)
我使用应用程序“查看端点”页面中的端点。
然而,当我试图获取“数据集”列表时,我总是收到403。获取令牌流程可能缺少什么?

您的流程有点短。数据集的REST调用似乎还可以,但据我所知,您必须通过授权代码请求访问令牌,而不仅仅是客户端凭据

1) 获取授权码

取决于您的流量,对于网站,它将在登录过程中接收,或使用{“response_type”:“code}调用/oauth2/authorize

2) 获取访问令牌

在变量中包含授权代码的情况下,您必须修改请求以包含到授权代码中,如下所示(更改授权类型和代码字段):

基本上说,您必须拥有一个访问Power BI资源的用户帐户。您的网站(clientid+secret)未经自身授权。必须有一个用户参与

此外,只有afaik的“组织帐户”用户才能访问power bi


要明确并强调此线程中的主要原因,请发布和评论:Power BI REST API只能通过具有组织帐户凭据且已登录(激活)Power BI on的用户使用。您可以通过检查此用户是否能够手动使用来检查RESTAPI是否工作。

您的流程有点短。数据集的REST调用似乎还可以,但据我所知,您必须通过授权代码请求访问令牌,而不仅仅是客户端凭据

1) 获取授权码

取决于您的流量,对于网站,它将在登录过程中接收,或使用{“response_type”:“code}调用/oauth2/authorize

2) 获取访问令牌

在变量中包含授权代码的情况下,您必须修改请求以包含到授权代码中,如下所示(更改授权类型和代码字段):

基本上说,您必须拥有一个访问Power BI资源的用户帐户。您的网站(clientid+secret)未经自身授权。必须有一个用户参与

此外,只有afaik的“组织帐户”用户才能访问power bi


要明确并强调此线程中的主要原因,请发布和评论:Power BI REST API只能通过具有组织帐户凭据且已登录(激活)Power BI on的用户使用。您可以通过检查此用户是否能够手动使用来检查REST Api是否工作。

不确定发生了什么。您是否可以尝试注册一个新的客户端应用程序,以确保该应用程序配置正确。你可以在这里注册你的应用程序:嗨,卢卡斯,我不仅创建了一个新的应用程序,还通过试用PowerBI Pro订阅在我的个人帐户下创建了一个新的Azure广告租户。我最终得到了同样的结果。Matthias Leibmann必须使用“应用程序权限”而不是“委托权限”,因为这是客户端凭据流。但是Azure AD不允许为PowerBI定义“应用程序权限”。您好,您是否使用PowerBI解决了此客户端\u凭据?是否有人解决了此问题也很好奇否。不幸的是,我还没有收到Microsoft支持团队的任何解释(我通过我们的付费帐户开立了一张票据)。我选择了基于用户的流程,在这里我必须以明文形式存储用户密码。我不知道发生了什么。您是否可以尝试注册一个新的客户端应用程序,以确保该应用程序配置正确。你可以在这里注册你的应用程序:嗨,卢卡斯,我不仅创建了一个新的应用程序,还通过试用PowerBI Pro订阅在我的个人帐户下创建了一个新的Azure广告租户。我最终得到了同样的结果。Matthias Leibmann必须使用“应用程序权限”而不是“委托权限”,因为这是客户端凭据流。但是Azure AD不允许为PowerBI定义“应用程序权限”。您好,您是否使用PowerBI解决了此客户端\u凭据?是否有人解决了此问题也很好奇否。不幸的是,我还没有收到Microsoft支持团队的任何解释(我通过我们的付费帐户开立了一张票据)。我选择了基于用户的流程,我必须在明文中存储用户的密码。Andrew,请检查以及@volkan-Power BI是特定的,因为它不允许没有用户(帐户)凭据的服务到服务调用。我认为答案是这样的,这证实了你的解释。我第一次读到它的时候,我假设它是另一个流,但我相信它是一样的。如果不需要UI交互,我们必须使用实际的用户名/密码进行服务到服务调用。Andrew,请检查以及@volkan-Power BI是特定的,afaik不允许没有用户(帐户)凭据的服务到服务调用。我认为答案是这样的,这证实了你的解释。我第一次读到它的时候,我假设它是另一个流,但我相信它是一样的。如果不需要UI交互,我们必须使用实际的用户名/密码进行服务到服务调用。
p_url = 'https://login.microsoftonline.com/' + 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' + '/oauth2/token'
data = { 'grant_type':'authorization_code',
     'client_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
     'client_secret': 'L------------------------------------------=',
     'code': authorizationCodeForSingedInUser,
     'resource':'https://analysis.windows.net/powerbi/api' }
r = requests.post(url=p_url, data=data)