使用Excel Power Query对.Net Odata Web Api进行身份验证

时间:2015-10-19 23:25:10

标签: .net oauth odata powerquery

我正在尝试使用Power Query下载我使用.net Web Api 2和OData v4 nuget包创建的Odata Feed。

我试图访问需要身份验证的Odata Feed。当我在电源查询中编辑身份验证类型时,我从未在请求​​中看到身份验证密钥。

如何配置Power Query以使用特定类型的身份验证?

奖励:我使用的是OAuth,那么如何配置电源查询以使用包含"授权承载的授权数据发送标头:token_here"

enter image description here

2 个答案:

答案 0 :(得分:3)

Web API凭据用于将秘密值放入URL查询(即某些网站的API密钥)。

目前无法从凭据对话框中在Power Query中添加您自己的Bearer令牌。

安全性较低且无法刷新,但您可以使用OData.Feed的标头参数直接对您的凭据进行硬编码:

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

(或者,可能更容易将服务器配置为接受Power Query中支持的Basic身份验证。)

答案 1 :(得分:1)

这是应该如何完成的,这是经过测试和运作的。 令牌总是被重新生成。

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"

//请注意,在设置隐私凭据时,请将其设置为" Organizational",而不是私有且肯定不公开。