2015-10-19 157 views
1

我試圖使用Power Query下載使用.net Web Api 2和OData v4 nuget軟件包創建的Odata Feed。使用Excel Power Query進行身份驗證與.Net Odata Web Api

我在嘗試訪問需要驗證的Odata供稿。在電源查詢中編輯身份驗證類型時,我從來沒有在請求中看到身份驗證密鑰。

如何配置Power Query以使用特定類型的身份驗證?

獎勵:我使用OAuth,那麼我將如何配置電源的查詢與身份驗證數據的報頭,包括髮送「授權承載:token_here」

enter image description here

+0

這似乎是相關的。也許我需要配置我的web api在授權失敗時用「WWW-Authenticate」標題響應? – TWilly

回答

3

的Web API憑據是把一個祕密的價值到URL查詢(即您的某個網站的API密鑰)。

目前沒有辦法在憑證對話框中的Power Query中添加您自己的持票人令牌。

它的安全性較低,並且不能被刷新,但你可以硬編碼直接使用OData.Feed的頭參數您的憑據:

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

(或者,它可能是更容易配置您的服務器接受基本身份驗證,這在功率查詢中得到支持。)

+0

當我發送填入API密鑰的測試請求時,我看不到關鍵字通過頭或URL參數。是否有需要在.net端配置以獲得excel發送api密鑰的東西? – TWilly

+2

以下是ApiKeyName的示例:'= OData.Feed(「http://example.com/Path?Version=22」,null,[ApiKeyName =「MyCustomKeyName」])然後將憑據設置爲Web API,值爲「SuperSecretKey 「Power Query對'http://example.com/Path?Version = 22&MyCustomKeyName = SuperSecretKey'請求發出請求。」 –

+0

非常感謝。如果我遇到任何其他問題,是否有任何文件可以指出我會有這種信息? – TWilly

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" 

//注意,設置隱私證書時,將其設置爲「組織」,而不是私人,肯定不是公共的。

相關問題