2017-02-14 25 views
5

我想用http觸發器創建C#Azure函數。我想用API Key來保護它,爲每個客戶提供一個單獨的密鑰,並且該功能應提供客戶特定的數據,以便確定誰在呼叫它。如何爲Azure函數配置客戶特定的API鍵

我可以使用Azure功能API密鑰來識別客戶嗎?獲取已通過的密鑰的名稱?或者在azure函數中沒有辦法知道哪個密鑰用於驗證請求?

如果有像GetApiKeyName()這樣的方法,我可以根據我的數據庫中的客戶列表來檢查密鑰名稱,並根據誰在調用函數返回不同的數據。例如想象我有一個銷售跟蹤系統,我的功能是/api/GetMonthlySales。如果客戶1用他們的API密鑰調用函數,他們應該獲得他們的月度銷售額,如果客戶2調用它,他們會得到不同的金額。

如果這不可能,那就意味着我需要爲每個客戶提供額外的驗證數據,以便他們傳遞給每個函數調用,例如,客戶ID和密鑰。但是這違背了使用Azure函數API密鑰的目的,對吧?

類似的情況是,如果我想在客戶打電話給我的功能時收費。如何識別哪個客戶正在呼叫我的功能?

+0

現在我決定使用Azure身份驗證*和*將這些相同的API密鑰放入數據庫。然後我知道Azure確保只有具有有效密鑰的人才能調用該函數,然後通過抓取querystring'code'參數並在數據庫中查找來查找是誰。要配置新客戶,我需要將它們添加到Azure Function auth,然後將它們添加到我的數據庫。希望將來會有內置的支持,但如果你的客戶很少,這種方式不會太麻煩。 – Rory

回答

5

Rory,

這很不幸今天不支持。身份驗證將根據使用的密鑰進行,您可以撤銷/更新單個客戶端密鑰,但該信息當前未顯示給功能。

有一些解決方法,比如使用管理API映射密鑰,並匹配請求密鑰以識別客戶端,但它們很麻煩而且效率低下。

我有一個問題跟蹤這個here,我剛剛標記了它再次分流,看看我們能否很快得到解決。

+0

感謝法比奧,當它可用時它將非常有用。我確實喜歡api密鑰管理的門戶支持;無需編寫大量代碼即可輕鬆設置auth。但是,無疑,認證需要能夠識別誰是已認證的,否則用例非常有限! – Rory

相關問題