2012-08-06 160 views
48

我有興趣爲web.api創建API密鑰,並允許客戶端使用API​​密鑰與API通信,而不是授權web.api提供。Web API創建API密鑰

我希望多個客戶端能夠與web.api進行通信。而不是創建用戶名和密碼,我可以使用API​​密鑰,並允許客戶端與客戶端進行通信。

有沒有這樣的內置功能?

如果你想實現它,你將如何繞過它?

回答

55

您可以通過使用HMAC Authentication來實現。基本上,可能有一個名爲ApiKey(apiKey,secretKey)的數據庫表。每個客戶端都有每個Apikey和密鑰:

  1. ApiKey就像一個公鑰,將通過HTTP(與用戶名類似)發送。

  2. 祕密密鑰不是通過HTTP發送的,使用這個祕密密鑰來做hmac一些信息併發送散列輸出到服務器。從服務器端,基於公鑰,你可以得到相關的密鑰和散列信息,與散列輸出進行比較。

我已經張貼在詳細的解答:How to secure an ASP.NET Web API

您可以通過密鑰對我的回答改變由ApiKey用戶名和散列密碼與你的想法映射。

+0

所以你需要客戶端在每個API請求上構建哈希表?這裏涉及的開銷是多少? – EkoostikMartin 2012-08-06 15:41:15

+0

我這麼認爲,這就是HMAC的工作方式,請您詳細說明您的問題嗎? – 2012-08-06 15:47:55

+0

如果您要在客戶端調用的每種方法上調用ComputeHash(string hashedPassword,string message)',那麼每次調用會添加多少時間? 'ComputeHash'平均需要多長時間才能完成? – EkoostikMartin 2012-08-06 15:49:53