使用 Excel Power Query 针对 .Net Odata Web Api 进行身份验证
authenticating with Excel Power Query against .Net Odata Web Api
我正在尝试使用 Power Query 下载我使用 .net Web Api 2 和 OData v4 nuget 包创建的 Odata Feed。
我正在尝试访问需要身份验证的 Odata 源。当我在 power query 中编辑身份验证类型时,我从未在请求中看到身份验证密钥。
如何配置 Power Query 以使用特定类型的身份验证?
奖励:我正在使用 OAuth,那么我将如何配置 power query 以发送 header 以及包含 "Authorization Bearer:token_here"
的授权数据
Web API 凭据用于将秘密值放入 URL 查询(即您的某些网站的 API 密钥)。
目前无法通过凭据对话框在 Power Query 中添加您自己的 Bearer 令牌。
它的安全性较低且无法刷新,但您可以使用 OData.Feed
的 Header 参数直接对您的凭据进行硬编码:
= 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"
// 注意,在设置privacy credential的时候,设置成"Organizational",不是private当然也不是public。
我正在尝试使用 Power Query 下载我使用 .net Web Api 2 和 OData v4 nuget 包创建的 Odata Feed。
我正在尝试访问需要身份验证的 Odata 源。当我在 power query 中编辑身份验证类型时,我从未在请求中看到身份验证密钥。
如何配置 Power Query 以使用特定类型的身份验证?
奖励:我正在使用 OAuth,那么我将如何配置 power query 以发送 header 以及包含 "Authorization Bearer:token_here"
的授权数据Web API 凭据用于将秘密值放入 URL 查询(即您的某些网站的 API 密钥)。
目前无法通过凭据对话框在 Power Query 中添加您自己的 Bearer 令牌。
它的安全性较低且无法刷新,但您可以使用 OData.Feed
的 Header 参数直接对您的凭据进行硬编码:
= 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"
// 注意,在设置privacy credential的时候,设置成"Organizational",不是private当然也不是public。