我正在尝试实施守护程序身份验证流程。 以下发布请求返回一个具有正确范围的访问令牌:
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.获取令牌流程可能缺少什么?
答案 0 :(得分:0)
你的流量有点短。对数据集的REST调用似乎没问题,但据我所知,您必须通过授权代码请求访问令牌,而不是单独的客户端凭据。
1)获取授权码
取决于您的流量,对于网站,它将在登录过程中收到,或使用{'response_type':'code}
调用/ oauth2 / authorize2)获取访问令牌
使用变量中的授权代码,您必须修改您的请求以包含授权代码,如此(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是否有效。