2015-09-01 2 views
12

Я пытаюсь использовать API-интерфейс Power BI REST, используя токен доступа, полученный с помощью метода «учетные данные клиента», но я продолжаю получать 403 Forbidden по моим запросам.Не удается получить токен доступа к учетным записям для авторизации Power BI

Мой код соответствует рисунку, показанному в this AzureAD sample. На самом деле, чтобы изолировать эту проблему, я бегу этот образец кода (с собственными значениями в parameters.json, конечно):

{ 
    expiresIn: 3599, 
    tokenType: 'Bearer', 
    expiresOn: Tue Sep 01 2015 16:56:07 GMT-0500 (CDT), 
    resource: '00000002-0000-0000-c000-000000000000', 
    accessToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ', 
    isMRRT: true, 
    _clientId: '[snip]', 
    _authority: 'https://login.windows.net/[snip]' 
} 

Когда я использую этот маркер доступа в curl запроса следующим образом, я получить 403:

curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ" 

Удивление, если это curl запрос был испорчен каким-то образом, я snooped out an access token “the wrong way” через браузер WebTools и выше работает отлично, возвращая 200 и JSON ответ с перечислением моих наборов данных.

Я также заметил, что код возврата 403 (запрещено), а не 401 (несанкционированный доступ), поэтому я задавался вопросом, было ли разрешение одобрено, но разрешения на стороне Power BI были неправильными. Но я также получаю 403, когда я использую любой мусорный текст для токена доступа (например, Authorization: Bearer foo), поэтому я отбросил эту теорию.

So. Я думаю, что у меня есть действующий тест, и я получаю то, что, по моему мнению, является допустимым токеном доступа (из этого кода client-credentials-sample.js), но он все еще не работает. Что мне не хватает?

+0

Отправьте мне свой код, и я отлажу его для вас http://bit.ly/emailjon. Я нахожусь в команде power bi. –

+2

Это смешно. Это самая сложная задача использовать REST Api, которую я когда-либо видел. Обычно его пара щелкает, чтобы получить ключ или токен, и через несколько минут вы можете получить результаты через почтальон. Почему команда PBI не может создать простую веб-страницу для автоматизации включения api и создания выборочных вызовов на основе учетных данных реальных учетных записей, как это делают многие другие? – Lee

ответ

5

С помощью некоторых людей Microsoft (спасибо, Джон Gallant & Джош Каплана), я узнал, что проверка подлинности OAuth клиента-учетные данные потока, как я делал с этот пример JavaScript обеспечивает недостаточный доступ. Для использования Power BI аутентификация должна основываться на конкретном пользователе.

Я попытался с помощью:

  1. аналогичного образец JavaScript username-password-sample.js
  2. resource значения https://analysis.windows.net/powerbi/api (спасибо, slugslog)
  3. добавления username и password к parameters.json

Это приблизило меня, но Я все еще получал ответ 400: "error_description":"AADSTS90014: The request body must contain the following parameter: 'client_secret or client_assertion'. …".

хак к adal-node библиотеке (жесткого кодирования секрет клиента, то есть, после того, как oauthParameters[OAuth2Parameters.CLIENT_SECRET] = "my-client-secret";line 217 of token-request.js) было достаточно, чтобы получить обратно маркер доступа, который работает в заголовке Authorization для исходного curl вызова.

Конечно, жесткое кодирование этой ценности не является моим окончательным решением. Во всяком случае, я не планирую использовать библиотеку adal-node. Но насколько это доказательство концепции для этого случая аутентификации, это ответ, к которому я пришел.

+0

спасибо для совместного использования! –

+0

@cgrayson У вас когда-нибудь было другое решение для этого? Я имею в виду, есть ли другая библиотека, которая выдает правильный токен доступа? –

+0

@VishwasShashidhar Нет, я так и не сделал. Мы закончили кодирование собственных методов, чтобы получить и использовать токены доступа. – cgrayson

2

Убедитесь, что ваше приложение, зарегистрированное в AAD, имеет разрешение на чтение всех наборов данных. Это должно решить проблему.

+0

Глядя в Azure Active Directory, на вкладке «Настроить» для этого «Приложения» в разделе «Разрешения для других приложений» есть «Служба Power BI». Он показывает «Разрешения для приложений: 0» (эта стрелка ничего не может изменить) и «Делегированные разрешения: 7» (в раскрывающемся списке показаны все флажки, включая «Чтение и запись всех наборов данных (предварительный просмотр)»). Это то, что было уже установлено перед вышеуказанными тестами; Я еще ничего не изменил. Я ищу подходящее место? – cgrayson

+0

Я взломал токен, который у вас был в приведенном выше примере. Я не вижу этих разрешений. Первое, что нужно проверить, это то, что вы используете тот же идентификатор приложения, что и тот, который вы проверяли в AAD. Если да, то это веб-приложение или собственное приложение? –

+0

Хм, я не уверен, что такое «идентификатор приложения»? Где я могу найти это в Azure и/или установить его на стороне клиента? Я сопоставлял свой поиск с «clientId», это то же самое. И это веб-приложение. По крайней мере, он пытается быть. :-) – cgrayson

2

Это не ответ, а один шаг вперед в процессе отладки. Я думаю, что ресурс, для которого запрашивается токен, должен быть «https://analysis.windows.net/powerbi/api». Я видел их в нескольких ссылках; один из них связан ниже. Даже после этого я все равно получаю 403. Как упоминалось в OP, если мы используем accessToken с портала powerBI, все работает.

http://blogs.msdn.com/b/richard_dizeregas_blog/archive/2015/02/24/building-apps-with-the-new-power-bi-apis.aspx&ei=HzQDaQP3&lc=en-IN&geid=7&s=1&m=620&ts=1443608339&sig=APONPFlUC04ktQuEYWqI_VKfMqvxascf0A

+0

Я получаю «сервер не найден», когда я пытаюсь получить доступ к https://analysis.windows.net/ любым способом. Также неясно, где вы предлагаете использовать этот URL. Как «URL-адрес хоста-хозяина» (как [здесь] (https://github.com/AzureAD/azure-activedirectory-library-for-nodejs/blob/master/sample/client-credentials-sample.js#L50)? Или как цель для реального запроса BI (как в моем примере с оригиналом 'curl')? – cgrayson

+0

, который должен быть значением свойства ресурса, для которого вы запрашиваете токен. Вот пример nodejs, с которым я работаю. Это вместо значения «00000009-0000-0000-c000-000000000000», которое вы используете в настоящее время. – slugslog

2

Так что я попытался это с моим собственным приложением, следующая команда работает (для меня):

curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer ey....qqqq" 

Кстати, дополнительный "v" после того, как -v кажется излишним.

Итак, я могу заключить, что ваше приложение не имеет необходимых разрешений для вызова API-интерфейсов Power BI.

Одна вещь, которую вы можете попробовать, это захватить один из наших образцов, создать для него новое приложение в AAD, а затем посмотреть, работает ли для него токен авторизации. Вот хорошее один попробовать: https://github.com/PowerBI/Integrate-a-tile-into-an-app

+0

Да, вы правы насчет моего '-vv'. Где-то вдоль линии я думал, что« завиток »был одним из те команды, которые увеличивают многословие с большим количеством 'v', но [nope] (http://stackoverflow.com/questions/24402473/what-is-meaning-of-vvv-option-in-curl-request). – cgrayson

Смежные вопросы