Я нахожусь в процессе создания приложения, которое использует Rest API службы Power BI для создания панелей мониторинга PBI. Однако документация по этому поводу кажется скудной и неполной. Само по себе получение токена доступа не так уж сложно. Если вы go для любого PBI Rest API выполняете c (например, Pu sh Datasets - Datasets PostDataset ) и нажимаете «Попробовать», вы можете найти токен доступа в окне предварительного просмотра запроса. Сложность состоит в том, чтобы ваш код автоматически извлекал нужный токен.
Я нашел по крайней мере один способ сделать эту работу, но я скопировал и вставил его с онлайн-форума, не совсем понимаю его и не могу заставить его работать с паролями приложений (что является существенное). Вот этот фрагмент кода.
def retrieve_access_token(email_address, password, my_org, client_id):
import adal
authority_url = f'https://login.microsoftonline.com/{my_org}.com'
context = adal.AuthenticationContext(
authority_url,
validate_authority=True,
api_version=None
)
token = context.acquire_token_with_username_password(
resource='https://analysis.windows.net/powerbi/api',
username=email_address,
password=password,
client_id=client_id
)
access_token = 'Bearer ' + token['accessToken']
return access_token
Я думаю, что этот код исходит от MS do c Получите токен доступа (Python) , но do c не содержит подробностей о значениях «авторитет» или «ресурс», что означает, что нет никакого способа изменить этот код, чтобы заставить его работать лучше, если вы вообще можете каким-то образом заставить его работать.
Я построил другая функция, основанная на видео YouTube Как выполнить Azure REST API с Postman , которая, как мне кажется, использует метод, аналогичный описанному в MS do c Платформа идентификации Microsoft и OAuth 2.0 код авторизации . Этот код может получить токен доступа, и я настроил регистрацию приложения Azure со всеми разрешениями, доступными для Power BI, но он не получает никаких ответов от PBI Rest API, и неясно, что это за токен. для. Вот этот код.
def get_access_token(tenant_id, client_id, client_secret):
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/token"
payload = {'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret,
'resource': 'https://management.azure.com/'}
headers = {'Cookie':
'fpc=Aj6jaa6czgFGoa7atKyYeA7IWmJdAQAAAPp_ctYOAAAA; x-ms-gateway-slice=prod; stsservicecookie=ests'}
response = requests.post(url, headers=headers, data = payload)
return 'Bearer ' + eval(response.text)['access_token']
Кто-нибудь знает, как получить токен доступа, который работает для PBI Rest API, просто используя код (Python, если возможно), и знает ли кто-нибудь, как чтобы пароли приложений работали с ним? Выполнение всего этого из Python было нелегким делом, мягко говоря, и любая помощь будет принята с благодарностью.
ПРИМЕЧАНИЕ. Часть my_org в retrieve_access_token является псевдокодом. Чтобы он работал, вам нужно найти URL-адрес login.microsoftonline. Я выяснил это методом проб и ошибок и не могу направить вас к какой-либо дополнительной информации.