Power BI REST 身份验证和权限

Power BI REST authentication and permissions

我正在尝试在另一个服务(作为数据源)和 Microsoft Power BI 之间建立一座桥梁。但是,我无法让 REST API 正常工作。

到目前为止,我已经成功地在 Azure AD 中创建了一个 Web 应用程序,获取了客户端 ID 和密码,接收了 API 的访问令牌,但在此之后我得到的只是 403 Forbidden 没有错误信息。但是,如果我尝试使用过期的令牌访问 API,我会收到一条错误消息,告诉我令牌已过期。

我已经阅读了一些关于这个主题的帖子,但他们都建议在没有用户登录并首先访问 Power BI 的情况下无法访问 REST API,这在服务中是不可能的- 到服务应用程序。

如何在没有任何用户交互的情况下正确访问服务?

以下是请求和回复,经过了一些删减。

请求 1:

POST /[our domain].com/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Cookie: flight-uxoptin=true; stsservicecookie=ests; x-ms-gateway-slice=productiona; stsservicecookie=ests
Host: login.microsoftonline.com
Connection: close
User-Agent: Paw/2.3 (Macintosh; OS X/10.11.3) GCDHTTPRequest
Content-Length: 203

grant_type=client_credentials&client_id=[client id]&client_secret=[client secret]&resource=https%3A%2F%2Fanalysis.windows.net%2Fpowerbi%2Fapi

回复 1:

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.5
x-ms-request-id: 52d6713c-d50b-4073-b030-aa10e33fdf27
client-request-id: 3aef4765-d602-46a6-a8ce-4b7792f678e5
x-ms-gateway-service-instanceid: ESTSFE_IN_209
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
Set-Cookie: x-ms-gateway-slice=productiona; path=/; secure; HttpOnly
Set-Cookie: stsservicecookie=ests; path=/
X-Powered-By: ASP.NET
Date: Wed, 24 Feb 2016 08:24:29 GMT
Connection: close
Content-Length: 1243

{"token_type":"Bearer","expires_in":"3599","expires_on":"1456305870","not_before":"1456301970","resource":"https://analysis.windows.net/powerbi/api","access_token":"[access token]"}

请求 2:

GET /v1.0/myorg/datasets HTTP/1.1
Authorization: Bearer [access token]
Content-Length: 0
Host: api.powerbi.com
Connection: close
User-Agent: Paw/2.3 (Macintosh; OS X/10.11.3) GCDHTTPRequest

回复 2:

HTTP/1.1 403 Forbidden
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: deny
X-Content-Type-Options: nosniff
RequestId: 803cc0cb-c65d-4212-9ab8-aed4ffa9862a
Date: Wed, 24 Feb 2016 08:25:13 GMT
Connection: close

您使用的 API 需要用户的访问令牌。他们访问用户帐户中的内容。因此,如果您没有访问令牌,您将一直被禁止。因此,您需要做的是在第一时间与用户一起获取访问令牌。然后存储刷新令牌。然后根据需要使用刷新令牌获取新的访问令牌。如果刷新令牌过期,您需要要求用户重新登录。