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

Posted

技术标签:

【中文标题】针对 .Net Odata Web Api 使用 Excel Power Query 进行身份验证【英文标题】:authenticating with Excel Power Query against .Net Odata Web Api 【发布时间】:2015-10-19 23:25:09 【问题描述】:

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

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

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

奖励:我正在使用 OAuth,那么我将如何配置电源查询以发送包含“Authorization Bearer:token_here”的身份验证数据的标头

【问题讨论】:

这似乎是相关的。也许我需要配置我的 web api 以在授权失败时响应“WWW-Authenticate”标头? 【参考方案1】:

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

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

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

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

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

【讨论】:

当我发送一个填写了 API 密钥的测试请求时,我没有在标题或 url 参数中看到密钥。我需要在 .net 端配置什么来让 excel 发送 api 密钥吗? 这里是 ApiKeyName 的一个示例:= OData.Feed("http://example.com/Path?Version=22", null, [ApiKeyName = "MyCustomKeyName"]) 然后将凭据设置为具有值“SuperSecretKey”的 Web API Power Query 请求 http://example.com/Path?Version=22&MyCustomKeyName=SuperSecretKey 非常感谢。如果我遇到任何其他问题,您是否可以向我指出任何包含此类信息的文档? 一些关于 odata.feed 的文档:msdn.microsoft.com/en-us/library/mt260868.aspx 这是不正确的方法,因为令牌中包含 IP 地址,并且可能会被您的后端服务怀疑。【参考方案2】:

这是应该如何完成的,并且已经过测试和工作。 令牌总是重新生成。

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”,不是private,当然也不是public。

【讨论】:

对于 MYUSERNAME / MYPASSWORD - 这些凭据是您在 Azure AD 中创建的服务帐户的凭据吗?

以上是关于针对 .Net Odata Web Api 使用 Excel Power Query 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章