2012-08-10 65 views
1

我一直在關注很多關於REST API和安全性的問題,並發現了一些有趣的信息,但仍然有一件事我不明白。因此,我有一個使用Zend框架開發的REST API,通過https通道進行基本身份驗證(因此,如果我忽略了我讀取的內容,登錄名/密碼在發送時會加密)。 此API的目的是由Android/iPhone應用程序調用,並且只會提供給擁有登錄名和密碼的人使用Zend創建安全REST API的最佳方式是什麼?

因此,目前要調用API,登錄名和密碼始終與呼叫等等,每次調用都會檢查它們(結果是每次調用API時都會調用數據庫來進行身份驗證)。

是否有某種會話管理(如在web開發中)來避免這種情況?

感謝,

回答

0

REST API應該是無狀態的,但你可以使用一些祕密密鑰您第一次提交的用戶名+密碼後獲得使用請求籤名。

換句話說,不要每次都發送用戶名和密碼,只需使用一次,即可獲得密鑰。

您可以看看簽名請求的幾個API,例如。一些實施OAuth。

+0

因此,如果我明白,第一次請求,我發送用戶名和密碼,然後服務器發送給我一個祕密密鑰,然後由客戶端用來調用API。 因此,我必須在數據庫中存儲這個祕密密鑰(我想我必須生成一個「隨機」),所以我仍然必須在每次調用時在數據庫中提出請求。第二個問題:該密鑰應該有效多久? 我看了一下twitter是如何工作的(它使用OAuth2),但我不得不承認我沒有真正理解:/ – Olivier 2012-08-10 21:35:13

+0

@ user1571681:基本上「取決於」:)你必須基本上能夠使用相同的祕密即使你沒有在第一個請求(你使用這個祕密簽署請求)之後的任何請求中交換它,也可以在客戶端和服務器上鍵入。這個祕密不需要存儲在數據庫中,但它是最常用的方法。它應該是隨機的,因此很難猜測,但如果您不需要這種安全性,則不是必需的。您可以以您想要的方式使密鑰無效 - 它可能是永久的,但根據您的API選擇合理的時間限制。 – Tadeck 2012-08-10 22:24:25

+0

@ user1571681:說到OAuth,起初可能很難理解,但線索是用戶在Twitter網站上進行身份驗證,然後被重定向到傳遞給客戶端應用程序的特定訪問令牌。然後,客戶端應用程序將它交換爲請求令牌,該令牌被用作我描述的密鑰。 API中的每個請求都應該進行簽名(根據標識請求的信息構建字符串,例如HTTP方法,主體,內容類型等),然後附加密鑰,然後使用例如'sha1'算法對整個事物進行哈希處理。您負責使用您的API,但可能基於OAuth。 – Tadeck 2012-08-10 22:28:08

相關問題