2012-01-30 206 views
2

我剛剛開始閱讀關於實現RESTful Web服務和創建RESTful API的信息。我已經理解了REST的基本概念,但我一直在探索如何安全地實現它。Restful API:如何安全地訪問api?

說例如,我的web應用程序有一個用戶登錄過程。成功登錄後,還應該通過哪些RESTful請求在服務器上進行身份驗證? 我能想到的是以下過程:在(POST用戶名/密碼API)

  • 用戶登錄
  • API與用戶鑰響應
  • 用戶鑰存儲在本地
  • 當進行任何進一步請求,我在請求中包含此密鑰進行身份驗證

但是,userkey似乎是我發送到API的狀態,但REST恰好是無狀態的。此外,在發送GET請求的情況下,這並不太安全。

OAUTH是我困境的解決方案嗎?或者以其他方式?有人能指導我這個...

感謝

回答

3

UserKey或更好的稱呼它標記,是一個客戶端狀態。您的RESTful API將保持無狀態,因爲它將此令牌存儲在哪裏。

通常這個標記是一些段(用戶名,密碼,登錄日期)散列爲MD5,SHA(或任何其他algorythm)的組合。 每當客戶端調用您的RESTful API的操作時,您的服務將使用相同的段比較傳入的令牌和即時生成的令牌。如果兩個生成的令牌都相等,則請求會被認證。

GET或POST方法沒有問題:您需要從查詢字符串或HTTP標頭中檢索令牌。

保護連接的關鍵在於通過SSL調用您的RESTful API,因此您的通信將具有高度的安全性。

GET和使用查詢字符串發送此令牌的一個重要問題可能是它太長,並且URL長度限制會阻止您除令牌本身之外擁有大量參數。

在我看來,你應該使用POST動詞,因爲你可以發送更多的數據,它更靈活,並且避免在查詢字符串中給出有問題的參數,這在日誌記錄方面可能很糟糕,因爲你要記錄用戶名,密碼,令牌和其他信息,這些信息是敏感信息,如果黑客竊取了您的日誌(或者一些不需要的人也會檢查您的日誌),這些信息可能會危及您的用戶。

2

OAuth是無狀態的 - 這是證明某人已授權客戶端做一些象徵 - 就像一個駕駛執照,其中政府已授權一個公民駕駛在街上的一輛車上。

所以 - 是的 - 使用OAuth。