Я добился чего-то подобного, создав специальный коннектор powerbi. Это позволяет легко аутентифицироваться в любом стандартном REST API (или любых других источниках). Конечно, вы также можете проделать некоторую работу по аутентификации в некоторых других пользовательских API (у меня была эта проблема). Но у adobe sign api неплохая реализация oauth2. Пользовательский соединитель, вероятно, является лучшим рекомендуемым решением. Вы можете делать очень сильные вещи (я делал). Это способ создания готовых к работе решений.
Как создать собственный соединитель: https://github.com/Microsoft/DataConnectors/blob/master/docs/m-extensions.md#overview
- Установите Power Query SDK из Visual Studio Marketplace
- Создание нового проекта коннектора данных
- Определение логики коннектора c
- Создание проекта для создания файла расширения
- Создание [ Мои документы] \ Power BI Desktop \ Каталог настраиваемых коннекторов
- Скопируйте файл расширения в этот каталог
- Включите функцию предварительного просмотра настраиваемых коннекторов данных в Power BI Desktop (в разделе Файл | Параметры и параметры | Настраиваемые соединители данных)
- Перезапустите Power BI Desktop
Если у вас есть базовый c коннектор, вы можете реализовать аутентификацию OAuth https://docs.microsoft.com/en-us/power-query/handlingauthentication, и здесь у вас почти решение для копирования и вставки https://docs.microsoft.com/en-us/power-query/samples/github/readme (из ресурса выше)
GithubSample = [
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin
]
],
Label = Extension.LoadString("DataSourceLabel")
];
StartLogin = (resourceUrl, state, display) =>
let
AuthorizeUrl = "https://Github.com/login/oauth/authorize?" & Uri.BuildQueryString([
client_id = client_id,
scope = "user, repo",
state = state,
redirect_uri = redirect_uri])
in
[
LoginUri = AuthorizeUrl,
CallbackUri = redirect_uri,
WindowHeight = windowHeight,
WindowWidth = windowWidth,
Context = null
];
FinishLogin = (context, callbackUri, state) =>
let
Parts = Uri.Parts(callbackUri)[Query]
in
TokenMethod(Parts[code]);
TokenMethod = (code) =>
let
Response = Web.Contents("https://Github.com/login/oauth/access_token", [
Content = Text.ToBinary(Uri.BuildQueryString([
client_id = client_id,
client_secret = client_secret,
code = code,
redirect_uri = redirect_uri])),
Headers=[#"Content-type" = "application/x-www-form-urlencoded",#"Accept" = "application/json"]]),
Parts = Json.Document(Response)
in
Parts;
Затем, когда вы впервые запустите свой соединитель, он попросит пользователя пройти аутентификацию и после этого сохранит токен.
Позже, когда вы запустите коннектор, все запросы к вашему API, выполненные методом Web.Contents https://docs.microsoft.com/en-us/powerquery-m/web-contents, будут аутентифицированы.