Проверка подлинности с помощью Excel Power Query для.Net Odata Web Api
Я пытаюсь использовать Power Query для загрузки канала Odata, который я создал с помощью.net Web Api 2 и пакета OData v4 nuget.
Я пытаюсь получить доступ к фиду Odata, который требует аутентификации. Когда я редактирую тип аутентификации в силовом запросе, я никогда не вижу, чтобы ключ аутентификации проходил в запросе.
Как настроить Power Query для использования определенного типа аутентификации?
Бонус: я использую OAuth, так как мне настроить запрос мощности для отправки в заголовке с данными аутентификации, которые включают "Авторизационный канал:token_here"
2 ответа
Учетные данные веб-API предназначены для ввода секретного значения в URL-запрос (т. Е. Ваш ключ API для какого-либо веб-сайта).
В настоящее время нет способа добавить свой собственный токен на предъявителя в Power Query из диалога учетных данных.
Это менее безопасно и не может быть обновлено, но вы можете жестко закодировать свои учетные данные напрямую, используя OData.Feed
Параметр заголовка:
= OData.Feed("http://localhost/", null, [Headers = [Authorization = "Bearer token_here" ] ])
(В качестве альтернативы может быть проще настроить сервер для приема базовой аутентификации, которая поддерживается в Power Query.)
Вот как это должно быть сделано, и это проверено и работает. Токен всегда регенерируется.
let
GetJson = Json.Document(Web.Contents("https://myservice.azurewebsites.net/oauth/token",
[
Headers = [#"Accept"="application/json",
#"Content-Type"="application/x-www-form-urlencoded;charset=UTF-8"],
Content = Text.ToBinary("login=MYUSERNAME&password=MYPASSWORD&grant_type=password")
])),
access_token = GetJson[access_token],
AccessTokenHeader = "Bearer " & access_token,
JsonTable = Json.Document(Web.Contents(
"https://myservice.azurewebsites.net/odata/Cities",
[
Query=[ #"filter"="", #"orderBy"=""],
Headers=[#"Authorization" = AccessTokenHeader ]
])),
#"Cities" = Table.FromRecords(JsonTable[value])
in
#"Cities"
// Обратите внимание, что при настройке учетных данных конфиденциальности установите для них значение "Организационный", а не частное и, конечно, не общедоступное.