аутентификация с помощью Excel Power Query против .Net Odata Web Api

Я пытаюсь использовать Power Query для загрузки канала Odata, созданного с помощью .net Web Api 2 и пакета Nuget OData v4.

Я пытаюсь получить доступ к каналу Odata, который требует аутентификации. Когда я редактирую тип аутентификации в запросе питания, я никогда не вижу, чтобы ключ аутентификации передавался в запросе.

Как настроить Power Query для использования определенного типа проверки подлинности?

Бонус: я использую OAuth, поэтому как мне настроить запрос мощности для отправки в заголовке с данными аутентификации, которые включают «Носитель авторизации: token_here»

введите описание изображения здесь


person TWilly    schedule 19.10.2015    source источник
comment
Кажется, это связано. Может быть, мне нужно настроить мой веб-API, чтобы он отвечал заголовком WWW-Authenticate при сбое авторизации?   -  person TWilly    schedule 20.10.2015


Ответы (2)


Учетные данные веб-API предназначены для ввода секретного значения в URL-запрос (т. Е. Вашего ключа API для некоторого веб-сайта).

В настоящее время нет возможности добавить собственный токен-носитель в Power Query из диалогового окна учетных данных.

Это менее безопасно и не может быть обновлено, но вы можете жестко закодировать свои учетные данные напрямую, используя параметр заголовка OData.Feed:

= OData.Feed("http://localhost/", null, [Headers = [Authorization = "Bearer token_here" ] ])

(В качестве альтернативы может быть проще настроить сервер для принятия базовой аутентификации, которая поддерживается в Power Query.)

person Carl Walsh    schedule 20.10.2015
comment
Когда я отправляю тестовый запрос с заполненным ключом API, я не вижу, чтобы ключ прошел ни в заголовке, ни в параметрах URL. Есть ли что-то, что мне нужно настроить на стороне .net, чтобы Excel отправлял ключ api? - person TWilly; 21.10.2015
comment
Вот пример ApiKeyName: = OData.Feed("http://example.com/Path?Version=22", null, [ApiKeyName = "MyCustomKeyName"]) Затем установите учетные данные для веб-API со значением SuperSecretKey. Power Query выполняет запрос http://example.com/Path?Version=22&MyCustomKeyName=SuperSecretKey - person Carl Walsh; 21.10.2015
comment
Огромное спасибо. Есть ли какая-либо документация, на которую вы могли бы указать мне, в которой была бы такая информация на случай, если у меня возникнут какие-либо дополнительные проблемы? - person TWilly; 21.10.2015
comment
Некоторая документация по odata.feed: msdn.microsoft.com/en-us/library /mt260868.aspx - person Haroon; 25.05.2016
comment
Это неправильный подход, поскольку токен имеет внутри IP-адрес и может вызвать подозрение у вашей серверной службы. - person Hrvoje Matić; 26.05.2017

Вот как это должно быть сделано, это проверено и работает. Токен всегда регенерируется.

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"

// Обратите внимание: при настройке учетных данных конфиденциальности установите для них значение «Организационное», а не частное и, конечно же, не общедоступное.

person Hrvoje Matić    schedule 26.05.2017
comment
для MYUSERNAME / MYPASSWORD - это учетные данные для учетной записи службы, созданной в Azure AD? - person bkwdesign; 09.04.2019