2012-05-15 73 views
2

我編寫了一個Web應用程序,我希望允許其他開發人員從中獲取信息。在應用程序中實現(安全)Api密鑰

我工作的服務器並不是那麼簡單,也不能處理那麼多請求,所以我們的想法是爲每個想要查詢我們信息的人生成並分配api密鑰。通過使用Api密鑰,我可以限制每日請求並可能收集一些統計信息,以查看哪些信息對其他開發人員非常有用。

事情是,我關心它的安全方面。由於Api密鑰將被髮送到我們的服務器(通過GET/POST等),有人可以通過wireshark嗅探請求並獲得開發人員API密鑰,沒有太多的努力,對吧?

我想過要生成一個密鑰和一個API密鑰。然後,我可以指示其他開發人員將它們連接起來,並將它發送到我們的API。然後,我會驗證散列是有效的,並允許請求...但是,然後同樣的問題會持續存在。黑客仍然可以嗅探該散列並代表其他開發人員的應用程序發出請求。

所以我的問題是

  • 我怎樣才能避免這個問題?
  • 還是更好呢,我的擔心甚至有效嗎?這是一個真正的問題嗎?
  • 是否有更好更安全的方式允許訪問我的信息,而不會使其他開發人員過於複雜?

你們認爲什麼?

+0

我已經倒下了這個意外(我甚至不記得有讀過這個)。我該如何解決這個問題。 – Gellweiler

回答

2

我想你正試圖解決一堆不同的問題。

如果您的目標是限制對服務器的請求數量,則應該創建一個調節機制。這是不平凡的,但我會根據IP地址而不是許可證密鑰 - 單個授權用戶可能會用很多請求淹沒您的系統。您可以通過IP地址進行限制,而無需實施許可證機制。

如果你想創建一個授權方案,你需要了解密碼學等 - 這是一個不平凡的問題。例如,您如何阻止合法用戶與他們的所有朋友共享許可證密鑰?你如何阻止黑客竊取你的密鑰並與他的所有朋友分享?

有很多解決方案 - 它們都會給用戶帶來一定程度的痛苦。例如,您可以在HTTPS上運行您的服務;這會阻止窺探,但會降低性能。您可以爲您的服務頒發「令牌」,並在使用一定次數後過期;獲取新令牌需要密碼交換(可能會檢查您的IP地址)。您可能需要「質詢/響應」類型的邏輯(包括IP地址驗證)。所有這些步驟使您的用戶的生活更加艱難;他們可能不會爲他們必須做的額外工作而感謝你。

+0

你完全正確。感謝您的幫助! – mpratt

2

關於嗅探,您的問題可以通過服務器上的HTTPS解決。

1

如果您想要限制訪問權限+潛在的一些使用率限制,那麼對API進行一些身份驗證絕對有意義。如果您使用API​​密鑰並希望避免嗅探,那麼HTTPS絕對是您的選擇。如果這不是一個選項,那麼您還可以使用像oAuth 1.0(http://oauth.net/core/1.0/)或Amazon AWS認證的散列式認證。這些工作通過向您的API用戶發放ID和祕密來實現。他們使用客戶端的祕密,將其插入消息體中,計算散列並在請求中包含散列(不是祕密)。在傳入方面,您會將哈希與消息內容上執行的相同操作進行比較,並將其包含的特定祕密與哈希相比較。

這意味着您可以驗證發件人而無需通過電報發送密鑰(請注意,內容仍然不安全 - 但您不必在每次請求時將密鑰通過電話傳遞)。缺點是開發人員執行起來很複雜。即使你使用oAuth 1.0模式,它有一些圖書館的開銷。

我在3scale工作,我們的一些工具也可能有幫助 - 我們的系統提供API密鑰,oAuth祕密共享以及開箱即用的API速率限制(http://www.3scale.net和PHP庫在這裏:https://github.com/3scale/3scale_ws_api_for_php)。

相關問題