客户端凭据不适用于powerBI REST API

时间:2016-02-07 14:15:24

标签: python rest authentication adal powerbi

我正在尝试实施守护程序身份验证流程。 以下发布请求返回一个具有正确范围的访问令牌:

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.获取令牌流程可能缺少什么?

1 个答案:

答案 0 :(得分:0)

你的流量有点短。对数据集的REST调用似乎没问题,但据我所知,您必须通过授权代码请求访问令牌,而不是单独的客户端凭据。

1)获取授权码

取决于您的流量,对于网站,它将在登录过程中收到,或使用{'response_type':'code}

调用/ oauth2 / authorize

2)获取访问令牌

使用变量中的授权代码,您必须修改您的请求以包含授权代码,如此(grant_type和代码字段已更改):

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)

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

更重要的是,afaik只有“组织帐户”用户才能访问权限。

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