Проверка подлинности с помощью 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"

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

Другие вопросы по тегам