Проверка подлинности и разрешения Power BI REST

Я пытаюсь создать мост между другой службой (в качестве источника данных) и Microsoft Power BI. Однако я не могу заставить REST API работать должным образом.

До сих пор мне удалось создать веб-приложение в Azure AD, получить идентификатор клиента и секрет, получить токен доступа для API, но после этого все, что я получаю, это 403 Forbidden без сообщения об ошибке. Однако если я попытаюсь получить доступ к API с просроченным токеном, я получу сообщение об ошибке, в котором говорится, что срок действия токена истек.

Я прочитал несколько сообщений на эту тему, но все они предполагают, что доступ к REST API невозможен без входа пользователя в систему и предварительного доступа к Power BI, что невозможно в приложении "сервис-сервис".

Как мне правильно получить доступ к сервису без какого-либо взаимодействия с пользователем?

Вот запросы и ответы, немного подвергнутые цензуре.

Запрос 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

person onik    schedule 24.02.2016    source источник
comment
Привет, оник, у тебя есть какое-нибудь решение для получения токена доступа. Я сталкиваюсь с аналогичной проблемой.   -  person Rahul Patel    schedule 05.03.2018
comment
Нет, я не стал исследовать это дальше, мы решили использовать Azure SQL для импорта данных в Power BI.   -  person onik    schedule 05.03.2018


Ответы (1)


API, которые вы используете, требуют токена доступа пользователя. Они получают доступ к содержимому в учетной записи пользователя. Поэтому, если у вас нет токена доступа, вы будете продолжать получать запреты. Итак, что вам нужно сделать, это получить токен доступа с пользователем в первый раз. Затем сохраните токен обновления. Затем используйте токен обновления, чтобы получить новые токены доступа по мере необходимости. Если срок действия токена обновления истек, вам нужно попросить пользователя снова войти в систему.

person Lukasz P.    schedule 27.02.2016
comment
Я принял этот ответ, хотя он не полностью лишен взаимодействия с пользователем, но на данный момент это лучшее решение. Я слышал, что MS улучшает свою аутентификацию, чтобы разрешить чистую аутентификацию между сервисами, но она еще не выпущена. - person onik; 02.03.2016
comment
@Lukasz P. Можете ли вы внести некоторые дополнения по этому поводу? Как я могу обновить токен? У меня похожая проблема. Я использую некоторый REST API, для которого требуется аутентификация файлов cookie. Я пытаюсь понять, как создать файл cookie из Power-bi. Любая помощь? - person Vamsidhar Mamillapalli; 26.05.2018